我正在使用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,但计时器仅设置一次。 需要帮助。
由于
答案 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函数进行销毁 计时器。