Ich schreibe ein Programm in C ++, wo ich eine Funktion in periodischen Zeitintervallen aufrufen muss, sagen wir alle 10ms. Ich habe nie etwas in Bezug auf Zeit oder Uhren in C ++ getan, ist dies ein schnelles und einfaches Problem oder eines von denen, wo es keine saubere Lösung gibt?
Danke!
Ein einfacher Timer kann wie folgt implementiert werden,
%Vor%Diese einfache Lösung bietet keine Möglichkeit den Timer zu stoppen. Der Timer läuft weiter, bis das Programm beendet wird.
Um die Frage zu vervollständigen, kann der Code von @ user534498 leicht angepasst werden, um das periodische Tick-Intervall zu haben.
Es wird nur benötigt, um den nächsten Startzeitpunkt am Anfang der Timer-Thread-Schleife und sleep_until
nach dem Ausführen der Funktion zu bestimmen.
Sie könnten in Threading suchen:
Hier ist eine zeitintervallgesteuerte Funktion, die in C implementiert ist, mit pthread.h sollte es ein einfacher Port nach C ++ sein. Ausführen einer Funktion in bestimmten Intervallen
Es hängt davon ab, was Sie pro Intervall tun würden - Anzeige von Zeit / Ticker oder etwas anderem an einem bestimmten Ort des Bildschirms / Formulars. Oder Sie müssen möglicherweise regelmäßig Daten an eine angeschlossene Maschine senden (über Buchse oder Leitung). Benötigen Sie wirklich 10 Millisekunden Präzision?
Abhängig von den Anforderungen, insbesondere der Genauigkeitsanforderung, haben Sie möglicherweise dedizierte Threads, um 'etwas zu tun. Warten Sie dann und machen Sie dasselbe noch einmal. Unter Windows können Sie SetTimer
verwenden, das WM_TIMER
event für jedes Intervall auslöst (es würde keinen Thread erfordern). Sie können auch Waitable-Timer, Multimedia-Timer usw. verwenden.
Endlich, aber ziemlich wichtig - Benötigen Sie Plattform- und Compiler-Kompatibilität? Das heißt, welches Betriebssystem würdest du verwenden oder brauchst du plattformunabhängig? Welche Compiler-Features suchen Sie (C ++ 11, C ++ 14 oder Pre C ++ 11).
Wenn Sie mit Visual C ++ arbeiten, können Sie dem Formular, das Sie eine periodische Funktion nennen möchten, ein Timer-Element hinzufügen (hier heißt es: MainForm
und mein Timer MainTimer
). Fügen Sie einen Aufruf zum Tick-Ereignis in den "Events" hinzu. Der Designer fügt eine solche Zeile in Ihre .h-Datei ein:
Dann ruft die Anwendung zu jedem Intervall (in ms angegeben) diese Funktion auf
%Vor%Entschuldigung, aber ich habe kein einfacheres Design gefunden.
Du könntest eine Klasse erstellen, der sowohl ein Thread als auch ein weak_ptr
gehört,
ein "Halter" zu sein, damit der Anrufer ihn sicher sehen kann, weil er abrufbar ist
wird auch dann noch existieren, wenn das Objekt zerstört ist. Sie wollen keinen baumelnden Zeiger.
Tags und Links c++ timer visual-c++