Pozbycie się instrukcji goto

0

Witajcie!

Mam problem ze swoim programem w C++. Problematyczna funkcja liczy czas pomiędzy wyciśnięciem fizycznego przycisku, a wciśnięciem go. Przycisk podłączony jest pod port LPT, obsługa jego działa sprawnie. Funkcja czas() jest wywoływana w momencie, kiedy użytkownik programu wciśnie przycisk (tym razem taki w programie), a przycisk fizyczny jest wciśnięty. Potem następuje sprawdzanie, kiedy przycisk zostanie wyciśnięty (stan napięcia zmieni się na inny niż 1), uruchamiany jest stoper, potem znowu jest sprawdzanie, tym razem kiedy przycisk zostanie wciśnięty. Te oba sprawdzania zrobiłem za pomocą instrukcji goto, co ja wiem, ani nie jest eleganckim rozwiązaniem, ani (w tym wypadku) wydajnym, bo w momencie sprawdzania procesor jest maksymalnie obciążony. Czym można by to zastąpić? W kodzie źródłowym pominąłem sam mechanizm odliczania czasu, uprościłem także funkcję odpowiedzialną za sprawdzanie napięcia na porcie, ale to chyba nie jest istotne do rozwiązania problemu. Z góry dzięki za pomoc.

void czas()
{
	skok1:
	if(Napiecie(LPT)==1)
		goto skok1;

	// w tym miejscu jest uruchamiany stoper

	skok2:
	if(Napiecie(LPT)==0)
		goto skok2;
	
	// w tym miejscu jest zatrzymywany stoper
}
0

Możesz zrobić tak:

while (Napiecie(LPT) == 1);

to zatrzyma program w tej pętli aż warunek przestanie być spełniony.

Nie zmniejszy to obciążenia, ale wygląda lepiej: to a propos pozbycia się goto.

Żeby zmniejszyć obciążenie musiałbyś sprawdzać stan co jakiś czas, ale chyba nie o to Ci chodzi? Wtedy pomiar będzie niedokładny. Może można tutaj zastosować przerwania?

1 użytkowników online, w tym zalogowanych: 0, gości: 1