2016-03-22 12 views
-1

Ich verwende settimer, um den Timer zu starten. Ich möchte den Timer-Wert jedes Mal ändern, wenn der Timer abläuft. Der Code ist wie folgt:Der Wert des Settimers konnte nicht geändert werden.

#include<iostream> 
#include <windows.h> 
#include <stdio.h> 
#include<WinUser.h> 
#pragma comment(lib, "user32.lib") 


    void main() 
    { 

     int id = 1; 
     static bool isStart = false; 
     static long l = 10000; 
     while(1) 
     { 
      int n; 
      MSG msg = {0}; 

      { 

       SetTimer(NULL, id,l,NULL); 

       while(GetMessage(&msg,NULL, 0,0)) 
       { 
        // Post WM_TIMER messages to the hwndTimer procedure. 
        if (msg.message == WM_TIMER) 
        { 
         std::cout << "Timer expired"; 
         KillTimer(NULL, id); 
         msg.message = 0x0; 
         l = 20000; 
         break; 
        } 
       } 
      } 
     } 

    } 

Auch wenn ich den Wert auf 20000 sein nicht nehmen zu ändern, wird der Timer nur einmal eingestellt. Brauchen Sie Hilfe zu diesem Thema.

Dank

+0

Ich denke, Ihre Nachrichten "msg" werden nicht an das Fenster gesendet. Warum sind nicht 'Dispatch (&msg);' im 'GetMessage' Schleife? Auch, was die Notwendigkeit von' # include ist 'wenn Sie' # include '? – ubuntugod

+0

habe ich Dispatch (&msg); noch seine Arbeit nicht – anonymous

+0

wo hast du es hinzufügen? – ubuntugod

Antwort

2

Sie müssen den Rückgabewert von SetTimer verwenden, um den Timer

Typ

int main(int argc, char **argv) 
{ 
    static bool isStart = false; 
    static long l = 5000; 
    while(1) 
    { 
     int n; 
     MSG msg = {0}; 

     UINT_PTR p = SetTimer(NULL, 0,l,NULL); 

     while(GetMessage(&msg,NULL, 0,0)) 
     { 
    // Post WM_TIMER messages to the hwndTimer procedure. 
      if (msg.message == WM_TIMER) 
      { 
       std::cout << "Timer expired" << std::endl; 
       KillTimer(NULL, p); 
       msg.message = 0x0; 
       l = 20000; 
       break; 
      } 
     } 
    } 
} 

SetTimer Von MSDN

Rückgabewert zu töten: Typ: UINT_PTR Wenn die Funktion ist erfolgreich und der hWnd-Parameter ist NULL, der Rückgabewert ist ein Intege r Identifizieren des neuen Timers. Eine Anwendung kann diesen Wert an die KillTimer-Funktion übergeben, um den Timer zu zerstören .

+0

Vielen Dank, so sehr, dass es jetzt funktioniert – anonymous

+1

@Sneha: Wenn eine Antwort Ihr Problem vollständig anspricht, sollten Sie es akzeptieren.Dies macht es für zukünftige Besucher einfacher, die Co schnell zu finden richtige Lösung. – IInspectable

+0

@Intspectable Ich habe bereits geantwortet, die Antwort war nützlich, und es funktioniert jetzt, siehe den Kommentar – anonymous

Verwandte Themen