Wie wartet man richtig?
-
CreateWaitableTimer
-
Ah ja, sehr gut! Genau sowas habe ich gesucht.
Vielen Dank!
-
Eine Frage habe ich noch:
Da mein Programm jede Stunde reagieren soll, muss natürlich auch beachtet werden, wenn ein neuer Tag beginnt. Also habe ich einfach in SYSTEMTIME zum Wert wHour eins dazu gezählt und wDay ebenfalls um 1 erhöht, wenn die Stundenzahl 23 überschritten hat.
Was ist aber, wenn ein Monatsende erreicht wird? Dann muss ich ja irgendwie rausfinden, wie viele Tage der Monat hat, denn wenn die Zeit falsch gesetzt ist, reagiert der Timer nie und wartet ewig.
Am besten wäre es natürlich, wenn man SetWaitableTimer dazu bringen könnte, nur den Wert wHour in der SYSTEMTIME Struktur zu beachten. Geht das irgendwie?
-
LARGE_INTEGER li; li.QuadPart = static_cast<__int64>(-10000) * static_cast<__int64>(1000 * 60 * 60);
-
nimm' 'nen richtigen Timer ... da ersparst du dir den ganzen Mist ..
-
warum nimmst du nicht einfach Sleep??
-
hmmmmmmmm schrieb:
warum nimmst du nicht einfach Sleep??
Erscheint mir auch am einfachsten.
// Ungefähr so enum WaitResult { TIMEOUT, EVENT_SIGNALED }; WaitResult WaitForFullHour() { SYSTEMTIME t; GetSystemTime( &t ); WORD seconds_to_wait = (59-t.wMinute)*60 + (59-t.wSecond); Sleep( seconds_to_wait * 1000 ); // bzw. if ( WAIT_TIMEOUT == WaitForSingleObject( event, seconds_to_wait*1000 ) ) return TIMEOUT; return EVENT_SIGNALED; }edit: WaitForSingleObject eingebaut
-
Sleep ist nicht zu empfehlen, da damit auf kein Abbruch Signal mehr gewartet werden kann.
-
Dann WaitForSingleObject
-
Waitable Timer sind eigentlich genau das, was ich mir vorgestellt habe, da das Warten gegebenenfalls unterbrochen werden muss.
Ich werden also einfach die Differenz zwischen der Systemzeit und der nächsten vollen Stunde berechnen und in Nanosekunden konvertieren.Danke für eure Hilfe und die vielen Antworten.
