Timer

lindin

Erfahrenes Mitglied
Hallo,

ich möchte gerne für eine Windowprozedur einen Timer erstellen!

Das sollte so aussehen, daß von Zeit zu Zeit ,vielleicht alle paar Sekunden eine bestimmte Funktion aufgerufen wird!

Ich dachte , ich könnte bei "switch(msg)" die Zeit abfragen, in einer Variablen speichern und dann bei der nächsten message mit der anderen Variablen vergleichen!
Ich könnte die WM_PAINT-message nehmen, die ich ansonsten nicht behandle, die wird ja öfter mal gesendet, ich wollte dann ein static int variable zunächste mit 0 initialisieren, dann bei jeder WM_PAINT eins hochzählen, und bei einem bestimmten Wert die Funktion aufrufen, das ganze sieht so aus:
Code:
switch (msg) {
    case WM_PAINT:
		  
          if(s!=-1){
                  zaehler++;
                  if (zaehler == 20){
                             MessageBox(NULL,"zähler 20",NULL,MB_OK);
	        zaehler=0;
                   }
          }
          break;
}

Aber die MessageBox kommt nie!
Wenn ich aber eine MessageBox direkt nach zaehler++; ausgebe, dann kommen ganz viel!

Naja, jetzt habe ich aber auch gemerkt, daß diese Nachricht wohl doch nicht ständig kommt, sondern nur beim Erstellen des Fensters, oder, wenn man es minimiert hat, und dann wieder maximiert!

Gibt es denn eine Message, die regelmäßig kommt, die ich nehmen könnte?
Und wo ist das Problem,. daß der Zähler nie 20 wird, obwohl mindestesn 20 mal die WM_PAint-Nachricht kam?
 
Jetzt habe ich das ganze in die while-GetMessage-Schleife eingebaut, und es funktioniert jetzt, ich mußte den Zähler anscheinend einfach zunächst mit 1 initialisieren und nicht mit 0!

Aber auch hier arbeitet die Schleife nur, wenn NAchrichten für das FEnster eintreffen, und wenn ich eine while(TRUE)-Schleife einbaue, bleibt das Programm da natürlich hängen...
 
Es gibt extra für Timer, man staune, ein WM_TIMER.

Dazu musst du allerdings (am besten in WM_CREATE) ein SetTimer aufrufen (Parameter siehe MSDN). In WM_TIMER prüfst du dann nochmal, ob du auch den richtigen Timer hast (es gibt Timer-IDs) und dort kannst du dann deine Routine aufrufen. Mit KillTimer kannst du einen Timer wieder wegtöten.

Achtung: Diese Timer gehören IMMER zu einem HWND, können also nicht einfach so rumfliegen. Sie sind auch nicht extra genau (gibt schon Abweichungen), aber bei ungefähren Zeitabständen völlig ausreichend.
 

Neue Beiträge

Zurück