求教SetTimer函数的用法,该如何处理
求教SetTimer函数的用法
代码如下:
ULONG i=0;
char buffer[32]="";
void CALLBACK TimerFunc(HWND handle,ULONG uMsg,ULONG timerid,DWORD timecount)
{
i++;
wsprintf(buffer,"%d",i);
MessageBox(NULL,buffer,NULL,MB_OK);
}
void TestSetTimer()
{
ULONG TimerID=SetTimer(NULL,0,1000,(TIMERPROC)TimerFunc);
if(TimerID==0)
{
MessageBox(NULL,"SetTimer error",NULL,MB_OK);
//return FALSE;
}
}
问题:
1.回调函数里不会执行弹出窗口。而主函数改成if(TimerID!=0)时,会正常每1秒弹出一个窗口。
这个怎么解释?
2.怎么才能让回调函数正常执行?
------解决方案--------------------
SetTimer总是通过WM_TIMER消息来完成工作的,所以你必须确保你的程序中有消息循环。
------解决方案--------------------
peekmessage创建消息队列
代码如下:
ULONG i=0;
char buffer[32]="";
void CALLBACK TimerFunc(HWND handle,ULONG uMsg,ULONG timerid,DWORD timecount)
{
i++;
wsprintf(buffer,"%d",i);
MessageBox(NULL,buffer,NULL,MB_OK);
}
void TestSetTimer()
{
ULONG TimerID=SetTimer(NULL,0,1000,(TIMERPROC)TimerFunc);
if(TimerID==0)
{
MessageBox(NULL,"SetTimer error",NULL,MB_OK);
//return FALSE;
}
}
问题:
1.回调函数里不会执行弹出窗口。而主函数改成if(TimerID!=0)时,会正常每1秒弹出一个窗口。
这个怎么解释?
2.怎么才能让回调函数正常执行?
------解决方案--------------------
SetTimer总是通过WM_TIMER消息来完成工作的,所以你必须确保你的程序中有消息循环。
------解决方案--------------------
peekmessage创建消息队列