6 Stimmen

C Timer Rückruf

Interessiert an etwas ähnlichem wie JavaScript setTimeout in C sowohl auf UNIX und Windows.

Im Grunde genommen möchte ich:

start_timer(&function_pointer, int time_in_secs)

oder so nahe daran, wie ich es erreichen kann.

Außerdem wäre etwas ähnliches wie setInterval schön (wo es den Callback alle n Sekunden aufruft), aber das kann mit setTimeout implementiert werden :)

8voto

scottm Punkte 27163

SetTimer in Win32 mit einer TimerProc als Rückruf.

/* calls TimerProc once every 60000 milliseconds */
SetTimer(NULL, 1, 60000, TimerProc);

5voto

Robert S. Barnes Punkte 38141

Versuchen Sie es mit den POSIX-Intervallzeitgebern timer_create und timer_settime, da Sie damit eine Rückruffunktion direkt angeben können, ohne Signale zu verwenden. Damit der Timer nur einmal abläuft (und nicht ständig wiederholt wird):

timer_zeit einstellen : Der Reload-Wert des Zeitgebers ist auf den Wert zu setzen der durch das it_interval-Mitglied von Wert. Wenn ein Zeitgeber mit einem it_interval ungleich Null ist, wird ein periodischer (oder periodischer (oder sich wiederholender) Zeitgeber angegeben.

Hier ist eine ausführliche Dokumentation zur Verwendung dieser Timer mit einem schönen Beispiel aus dem Linux Programmer's Manual auf kernel.org:

timer_create - erstellt einen POSIX-Zeitgeber pro Prozess

2voto

Employed Russian Punkte 180738

Für UNIX, man setitimer .

1voto

Lance Richardson Punkte 4560

Einige Informationen über alarm() und setitimer() finden Sie unter aquí . Beachten Sie, dass es sich bei der Funktion upcall um einen Signal-Handler handelt, der allen Einschränkungen unterliegt, die mit Signal-Handlern verbunden sind, wie ausführlich beschrieben aquí .

Wie im ersten Link erwähnt, ist alarm() POSIX-basiert, setitimer() nicht (obwohl es flexibler ist).

-1voto

viraptor Punkte 32254

Versuchen Sie es mit Schlagfertigkeit. Wenn Sie portablen Code brauchen, ist die Wahrscheinlichkeit groß, dass Sie nichts Portableres schreiben können als sie ;)

http://library.gnome.org/devel/glib/2.20/glib-The-Main-Event-Loop.html#g-timeout-add

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X