Eigenwilliger Timer
-
Hallo zusammen !
Ich habe mal wieder ein Problem ! Ich setze in meiner Anwendung einen Timer
mit einem 10 Sekunden Intervall :SetTimer(NULL, lTimerID, TIMERINTERVAL, TimerProc);Ich benötige diese Routine, um in regelmässigen Abständen bestimme Daten zu
vergleichen. Leider beginnt der Timer nach ein paar Minuten sehr ungenau
zu werden. Die Funktion TimerProc wird dann alle 7 Sekunden aufgerufen,
dann alle 4, wieder 7 usw. Es ist aber wichtig, dass diese Funktion wirklich
nur alle 10 Sekunden durchlaufen wird.Warum wird der Timer nach ein paar Minuten so ungenau ?
Viele Grüße
SciFi
-
Die WM_TIMER Nachricht ist eine Low-Priority Nachricht, vermutlich sendet Windows einfach wichtigere Nachrichten wie WM_PAINT an dein Fenster, check das mal mit Spy++ oder so...
-
Hallo !
Erstmal vielen Dank für Deine Antwort. Ich habe den Fehler gefunden. *peinlich*. Also, ich nutze den Timer in einer DLL. Diese DLL wird von einer EXE Datei regelmässig ge-/und entladen. Ich habe also nun den Timer gesetzt :
SetTimer(NULL, lTimerID, TIMERINTERVAL, TimerProc);Als die DLL wieder entladen wurde, habe ich den Timer wieder entladen.
KillTimer(NULL, lTimerID);Nun, steht in der Online-Hilfe folgendes :
If the application calls SetTimer with hWnd set to NULL, this parameter must be the timer identifier returned by SetTimer.Ich habe also den Timer nicht richtig entladen um somit wurden es immer mehr. Richtig wäre folgender Code :
[cpp]
//Timer laden
UTimerID = SetTimer(NULL, lTimerID, TIMERINTERVAL, TimerProc);//Timer entladen
KillTimer(NULL, UTimerID);
[/cpp]Sorry, für meine Dummheit

-
Das liegt daran, dass wenn du kein Fenster-Handle angibst, dass dann nIDEvent (also dein lTimerID) ignoriert wird.
If the hWnd parameter is NULL, this parameter is ignored.