无法更改settimer值

时间:2016-03-22 06:31:41

标签: c++ winapi

我正在使用settimer来启动计时器。我想在每次计时器失效时更改计时器值。 代码如下:

#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;
                    }
                }
            }
        }

    }

即使我将值更改为20000,但计时器仅设置一次。 需要帮助。

由于

1 个答案:

答案 0 :(得分:2)

您需要使用SetTimer的返回值来终止计时器

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来自MSDN

     

返回值

     

类型:类型:UINT_PTR如果函数成功并且是hWnd参数   为NULL,返回值是标识新计时器的整数。一个   应用程序可以将此值传递给KillTimer函数进行销毁   计时器。