Schleifen / Timer in C

8

Wie erstellt man einen Timer in C?

Ich möchte, dass ein Code kontinuierlich Daten aus einer gps-Parser-Ausgabe holt.

Gibt es dafür gute Bibliotheken oder sollte es selbst geschrieben werden?

    
jarryd 04.04.2011, 14:50
quelle

7 Antworten

14

Einfachste verfügbare Methode:

%Vor%     
Marko Kevac 04.04.2011, 17:16
quelle
6

Auf POSIX-Systemen können Sie einen Alarm erstellen (und fangen). Der Alarm ist einfach, aber in Sekunden einstellbar. Wenn Sie eine feinere Auflösung als Sekunden benötigen, verwenden Sie settimer .

%Vor%

Und fangen Sie den Timer in regelmäßigen Abständen ab, indem Sie sigaction einstellen.

    
Thomas M. DuBuisson 04.04.2011 16:28
quelle
4

Man erstellt "keinen Timer in C". Es gibt nichts über das Timing oder die Zeitplanung im C-Standard. Wie dies erreicht wird, bleibt dem Betriebssystem überlassen.

Dies ist wahrscheinlich eine vernünftige Frage für einen C noob, da viele Sprachen solche Dinge unterstützen. Ada tut das, und ich glaube, dass die nächste Version von C ++ das wahrscheinlich tun wird (Boost hat jetzt Unterstützung dafür). Ich bin mir ziemlich sicher, dass Java das auch kann.

Unter Linux wäre der beste Weg, pthread zu verwenden. Insbesondere müssen Sie pthread_create () aufrufen und die Adresse Ihrer Routine übergeben, die vermutlich eine Schleife enthält mit einem sleep () (oder usleep () ) rufe unten an.

Beachten Sie, dass, wenn Sie etwas tun wollen, das die Echtzeit-Planung approximiert, nur ein dummes usleep() nicht gut genug ist, weil es die Ausführungszeit der Schleife selbst nicht berücksichtigt. Für diese Anwendungen müssen Sie einen periodischen Timer einrichten und darauf warten.

    
T.E.D. 04.04.2011 15:01
quelle
1

SDL bietet einen plattformübergreifenden Timer in C.

Ссылка

    
Null Set 04.04.2011 15:25
quelle
0

Wenn Sie Windows verwenden, können Sie SetTimer , sonst können Sie einen Timer aus timeGetTime und _beginthreadex zusammen mit einer Warteschlange von Timern mit Callbacks erstellen

    
Necrolis 04.04.2011 14:58
quelle
0

Die Frage nach einem Timer ist ziemlich unspezifisch, obwohl mir zwei Funktionen in den Sinn kommen, die Ihnen helfen werden:

  • sleep () Diese Funktion bewirkt, dass die Ausführung für eine bestimmte Anzahl von Sekunden gestoppt wird. Sie können usleep und nanosleep auch verwenden, wenn Sie die Sleeptime genauer angeben möchten
  • gettimeofday () Mit dieser Funktion können Sie zwischen den Zeitschritten anhalten.

Siehe Hilfeseiten für weitere Erklärungen:)

    
Chris 04.04.2011 15:17
quelle
0

Wenn die GPS-Daten von einem Hardwaregerät stammen, z. B. über einen seriellen Port, sollten Sie die Architektur ändern, damit der Parser den Code startet, den Sie ausführen möchten, wenn mehr Daten vorhanden sind verfügbar.

Es könnte dies durch eine Callback-Funktion tun oder es könnte ein Event senden - die tatsächliche Implementierung hängt davon ab, was Sie zur Verfügung haben.

    
flumpet 04.04.2011 20:31
quelle

Tags und Links