KillTimer



  • Hallo,

    ich habe im Internet keine Antwort auf meine Frage finden können also frage ich euch mal:

    Ich habe einen Timer mit einem Interval von 1 Sekunde. Wenn dann die WM_TIMER Message kommt führe ich KillTimer aus jedoch kommen immernoch unendlich viele WM_TIMER Nachrichten an:

    void blabla
    {
       ::SetTimer (hWnd, 1, 1000, NULL);
    }
    
    BOOL CALLBACK WndProc (HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam)
    {
       switch (nMessage)
       {
          case WM_TIMER:
             ::MessageBox (hWnd, "Eine Sekunde ist vorbei", "Timer abgelaufen", NULL);
             ::KillTimer (hWnd, 1);
             break;
       }
    
       return FALSE;
    }
    

    Die MessageBox popt dann jede Sekunde auf, obwohl ich den Timer gekillt habe. Ich weiß, dass KillTimer nicht die Message Queue löscht, aber warum kommt die MessageBox dann so oft? Oder wurden dann in der einen Sekunde so viele Messages losgeschickt?

    Wie muss ich KillTimer richtig einsetzen oder gibt es vielleicht ne bessere Lösung?

    Vielen Dank schonmal im voraus 🙂



  • Hat hWnd zum Zeitpunkt von Aufruf von blabla() schon den Wert des künftigen Fensterhandles?

    // edit: btw, die WndProc() soll bei Nachrichten, die sie nicht selbst behandelt DefWindowProc() aufrufen und dessen Ergebnis zurückgeben. Der richtige Rückgabewert bei der Behandlung von WM_TIMER ist 0 .



  • ja blabla() wird eigentlich ebenfalls von der WndProc() aus aufgerufen mit dem Handle als Parameter



  • Dann kann ichs nicht nachvollziehen. Zeig mehr Code.


Anmelden zum Antworten