muss eine Funktion in periodischen Zeitintervallen in C ++ aufrufen

8

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!

    
Execut1ve 11.01.2014, 02:02
quelle

6 Antworten

13

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.

    
user534498 11.01.2014 03:33
quelle
7

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.

%Vor%     
florgeng 12.04.2017 15:09
quelle
0

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

    
JMercer 11.01.2014 03:13
quelle
0

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).

    
Ajay 11.01.2014 05:50
quelle
0

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:

%Vor%

Dann ruft die Anwendung zu jedem Intervall (in ms angegeben) diese Funktion auf

%Vor%     
RawBean 13.01.2014 07:56
quelle
0

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.

%Vor%     
user9335240 14.02.2018 20:47
quelle

Tags und Links