WINCE无窗口程序使用定时器

      对于WINCE下有窗口的程序,可以通过简单的使用API SetTimer来创建一个定时器。当定时器超时时窗口会收到一个WM_TIMER消息,我们在WM_TIMER消息中去做定时器超时处理即可。而对于无窗口的程序,因为本身没有消息循环,所以无法收到WM_TIMER消息,定时器也就无法正常工作了。

     那么无窗口程序如何通过SetTimer来定时呢?其实我们只需在无窗口程序里的主线程中加一个消息循环,来处理WM_TIMER即可,参考代码如下:

UINT uTimerID = ::SetTimer(NULL,NULL,1000,NULL); MSG msg; //消息循环 while (GetMessage(&msg, NULL, 0, 0)) { switch(msg.message) { case WM_QUIT: :KillTimer(NULL,uTimerID); break; case WM_TIMER: //TODO:Treat WM_TIMER message break default: break; } } }

 

但对于无窗口的程序这样还是比较麻烦的,使用定时器的时候还得添加消息循环的代码,其实微软还提供了一个API timeSetEvent来创建定时器,已实现更精确的定时,参考代码如下:

// 需要引入的头文件和库 #include <mmsytem.h> #pragma comment(lib,"mmtimer.lib") // 定时器回调函数 void CALLBACK TimerProc(UINT wTimerID,UINT msg,DWORD dwUser,DWORD dw1,DWORD dw2); // 创建定时器 MMRESULT uTimerID = timeSetEvent(1000,1,TimerProc,(DWORD)this,TIME_PERIODIC | TIME_CALLBACK_FUNCTION); // 定时器超时处理 void CALLBACK TimerProc(UINT wTimerID,UINT msg,DWORD dwUser,DWORD dw1,DWORD dw2) { // TODO:Place Code here }

最后别忘了调用timeKillEvent关闭定时器。

你可能感兴趣的:(timer,api,function,null,callback,WinCE)