一个问题难住了我们的技术总监,求大家帮忙分析:为什么创建2个定时器,第一个创建生效,第二个没生效!
注意下面我是用win32原生的方式创建定时器,不是用封装过的MFC
首先,我在主线程里创建个线程:
HANDLE dwThreadId;
HANDLE Thread = CreateThread( NULL, // default security attributes
0, // use default stack size
ThreadProc, // thread function
NULL, // argument to thread function
0, // use default creation flags
&dwThreadId); // returns the thread identifier
if (Thread == NULL)
{
return OS_ERROR;
}
在线程里设置定时器并启用消息泵:
DWORD WINAPI ThreadProc( LPVOID lpParam )
{
MSG msg;
g_uwTimeerId = SetTimer(NULL,1,1,TimeProc);
while(GetMessage(&msg,NULL,0,0))
{
if(msg.message==WM_TIMER)
{
DispatchMessage(&msg);
}
}
return OS_SUCCESS;
}
这一次定时器启动成功 TimeProc 确实在循环调用!
关键的问题来了,我想再启动一个定时器,注意这次我是想在主线程里再SetTimer 一次!!
看我的实现:
主线程里:g_HwiTimeerId = SetTimer(NULL,1,1,SecondTimeProc);
但是这一次定时器好像没能启动成功,SecondTimeProc 压根没进去!!!
为什么SecondTimeProc 压根没进去呢?这个是问题所在!简单调试了下,GetMessage貌似没得到!为什么呢?
谢谢!!
[解决办法]
两个timerID一样的, 鉴定完毕..
[解决办法]
哎,这也能称技术总监啊。。。
[解决办法]
if (0!=g_uwTimeerId){KillTimer(g_uwTimeerId);}g_uwTimeerId = SetTimer(NULL,1,1,TimeProc);
[解决办法]
真不敢相信我居然不是技术总监。
[解决办法]
NukeNabbe 你用过没
------解决方案--------------------
标题党,果然nb,很快就让别人帮忙定位到问题了。
[解决办法]
标题是你们公司的技术总监让你这么写的吧,真牛B。。。
[解决办法]
反正一条,用NULL作为第一个参数,启动第一个之后,在创建,是要kill掉第一个的吧。第二个才生效。
这个用定时器刷新界面用的相当多哦。
估计是你自己也的东西吧。
[解决办法]
也许你们技术总监不做windows下的开发