[C++]Przerwanie wykonywania kodu i wykonywanie proc. przerw


(Dodebillo) #1

Od kilku dni borykam się z problemem przerwania wykonywania głównej pętli programu, w momencie gdy minie określony czas. W mikrokontrolerach, którymi bawiłem się trochę dłużej wykonywało się to przez przerwanie od timera - program opuszczał główną pętle, wykonywał procedurę przerwania a po wszystkim wracał do swojej pętli. Jak coś takiego zrealizować w Windowsie? Jak dużą dokładność takiego timera można uzyskać?


(Fiołek) #2

QueryPerformanceFrequency, QueryPerformanceCounter - to będzie najdokładniejsze.

Timer nadal wykorzystujesz(czy to gotowy, czy własny oparty na ww. rozwiązaniu), gdy czas, który upłynął od rozpoczęcia przekroczył maksymalny, przerywasz pętle(wychodzisz z niej). Czy Ty kod obsługujący timeout dodasz w warunku pętli(np.

if(time.elapsed() >= maxTime)

(Dodebillo) #3

W przypadku przerwania pętli, wszelkie dane niezbędne do dalszej pracy są zapisywane, procesor przechodzi do wykonywania procedury przerwania a po jej wykonaniu wraca do pętli, miejsca, w którym był ostatnio odczytując wcześniej zapisane dane. Nie ma możliwości bardziej sprzętowej obsługi przerwania od timera?


(Fiołek) #4

Nie, nie ma "bardziej sprzętowej metody" - co jest złego w tej?

();

(Dodebillo) #5

Generalnie chodzi o to, że muszę wykonywać operację dokładnie co 0,5 sekundy. Muszę odmierzyć ile czasu wykonuje się funkcja i później odczekać resztę czasu, tak aby po po 0,5 sekundy (od momentu początku wykonywania funkcji) funkcja mogła wykonać się znów. Gdy funkcja ta się nie wykonuje to wykonywać ma się cała reszta programu... Może wystarczyło by zmierzyć godzinę początku i końca funkcji i i na tej podstawie obliczyć początek wykonywania funkcji?


(Fiołek) #6

Od czego jest Timer? :wink: Nigdzie nie napisałem, że to MUSI być osobna klasa - równie dobrze możesz sobie zapisać w zmiennej czas rozpoczęcia i co przebieg pętli sprawdzać, ile czasu upłynęło.