Timer lässt sich nicht Killen



  • Hallo, habe versucht einen Timer in mein Programm zu Implemetieren.

    Starten mit:

    int TimerSec = 1;
    
    SetTimer(hChild, TimerSec, 10, NULL);
    

    funktioniert einwandfrei.
    Aber beenden mit:

    case WM_TIMER:
          {
    	     MessageBox(NULL, "test", "Timer",MB_ICONQUESTION | MB_YESNO | MB_SYSTEMMODAL | MB_DEFBUTTON2);
    
             KillTimer(hChild, TimerSec)	 
             return 0;
          }
    

    will so gar nicht. (MessageBox ist nur zum testen)

    Eigentlich sollte sich eine MSG öffnen und der Timer sollte damit verschwinden. Ich bekomme aber leider MSG´s bis zum absturz meines Programmes. Neu gestartet wird der Timer nicht.
    Hat jemand da Erfahrungen?



  • Lordlormi schrieb:

    Ich bekomme aber leider MSG´s bis zum absturz meines Programmes.

    Na logisch! Die MessageBox-Funktion implementiert intern eine MessageLoop, Nachrichten werden also verteilt. Und schon bekommst Du fröhlich alle 10ms! weiter Deine Timer-Messages. Kille den Timer, bevor Du die MessageBox anzeigst. Und da ich weiterhin annehme, daß Du eine Sekunde warten willst (wegen TimerSec), mußt Du noch das Timeout auf 1000 setzen:

    int TimerSec = 1;
    
    SetTimer(hChild, TimerSec, 1000, NULL);
    
    case WM_TIMER:
          {
             KillTimer(hChild, TimerSec)	 
    
    	     MessageBox(NULL, "test", "Timer",MB_ICONQUESTION | MB_YESNO | MB_SYSTEMMODAL | MB_DEFBUTTON2);
    
             return 0;
          }
    


  • TimerSec sollte konstant sein, sonst kann die Variable aus Versehen verändert werden.



  • Und wer hät's gedacht, funktioniert sogar wenn man es richtig macht 🙂

    Vielen Dank für die Schnelle Antwort.

    LordLormi


Anmelden zum Antworten