This question already has answers here:
Closed 6 years ago.
Can I use a SetTimer() API in a console C++ application?
(6个答案)
我有以下计划。我想知道
然后在回调中将bStillBusy设置为“false”。
(6个答案)
我有以下计划。我想知道
setTimer
是如何工作的。所以,我写了一个程序,但无法理解为什么没有调用TimerProc函数为什么?要启动setTimer/TimerProc还需要做些什么。请帮忙。#include <windows.h>
#include <stdio.h>
VOID CALLBACK TimerProc(
HWND hwnd, // handle of window for timer messages
UINT uMsg, // WM_TIMER message
UINT idEvent, // timer identifier
DWORD dwTime // current system time
) {
printf("from callback\n");
}
int main(int argc, char *argv[])
{
UINT timerid = SetTimer(NULL,1,1000,TimerProc);/*changed the time from 1 to 1000, but no effect*/
printf("timerid %d\n",timerid);
int i,j;
//delay loop, waiting for the callback function to be called
for(j=0;j<0xffffffff;j++);
/*{
printf("%d\n", j);
}*/
printf("done \n");
system("PAUSE");
return 0;
}
最佳答案
SetTimer文档说明:
*指定TimerProc回调函数时,默认窗口过程在处理WM_TIMER时调用回调函数因此,您需要在调用线程中分派消息,即使您使用TimerProc而不是处理WM_TIMER*
相反,你需要的延迟循环是:
bool bStillBusy = false;
int main()
{
MSG msg;
bStillBusy = true;
id = SetTimer(NULL, 0, 3000, (TIMERPROC) TimerProc);
while(bStillBusy)
{
GetMessage(&msg, NULL, 0, 0);
DispatchMessage(&msg);
}
...
etc.
}
然后在回调中将bStillBusy设置为“false”。
关于c - 为什么setTimer不起作用? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15406326/
10-11 03:50