This question already has answers here:
Closed 6 years ago.
Can I use a SetTimer() API in a console C++ application?
(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