多个定时器同时使用 小弟在一程序中同时使用定时器1和2: SetTimer(1,1000,NULL); SetTimer(2,100,NULL); 编译能通过,但运行不正常,请问各位大侠是不是两个定时器同时使用的原因??有什么办法能同时使用?? 谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你的timer函数是怎么写的得贴出来。 在相应函数中就直接判断的void CControlDlg::OnTimer(UINT nIDEvent) { if(nIDEvent==1) { ..... } if(nIDEvent==2) { ..... }} SDK的方式是这样用的:SetTimer(hwnd, // handle to main window IDT_TIMER1, // timer identifier 10000, // 10-second interval (TIMERPROC) NULL); // no timer callback SetTimer(hwnd, // handle to main window IDT_TIMER2, // timer identifier 300000, // 5-minute interval (TIMERPROC) NULL); // no timer callback case WM_TIMER: switch (wParam) { case IDT_TIMER1: // Process the 10-second timer. return 0; case IDT_TIMER2: // Process the 5-minute timer. return 0; } 按理说你这也没错 没有问题的,多个定时器可以安全的共用,但是还要注意在程序中是否有其它问题,可以传CODE来看看 if(nIDEvent==1) { .. } else if(nIDEvent==2) { .. } 使用多个定时器应该不会有问题的,可能是你的处理WM_TIMER消息的响应函数中有问题,void CClassNameDlg::OnTimer(UINT nIDEvent) { switch(nIDEvent) { case 1: ... break; case 2: ... break; } CDialog::OnTimer(nIDEvent)} 但是定时器1定时1s,定时器2定时0.1s,这样的话定时器2运行10次后基本与定时器1同时触发,OnTimer(UINT nIDEvent)应该安哪个执行呢?? 两个timer同时触发的时候,应该是由系统来调用两次timer吧,同时触发也不是问题。 Timer是一个消息,所以永远不可能两个Timer同时触发。就算是理论上的同时,在经过windows处理后,也会有先后,这是由内核保证的。 楼主需要确保nIDEvent确实就是1和2,OnTimer的nIDEvent是同SetTimer的返回值保持一致的。另外,楼主,当你把调试断点设置在OnTimer里面的时候,其实Timer线程是不会停止的,结果就是之后Timer线程并不是按你设定的时间到达的。 Timer消息会放入线程的消息队列 基于MFC 的 window media player的视频播放器问题 mschart画折线图,怎么控制几条折线哪条可见哪条不可见? 在两个线程上,使用同一个类分别实例化的两个对象,函数的代码在内存上是同一个代码段么。 很久没来网络编程板块了,都还有熟人在吗? odbc 怎么可以设置记录集为可更新? VC/MFC版优秀斑竹、网友评选 结果 怎样实现弹出提示信息! pcb模拟器的问题? 一个关于定义const变量的问题。 视频通过H264或MPEG4编码压缩后如何与传输代码连接? 类与类之间函数的引用 vc 新增一个对话框,怎么防止别人用鼠标拖住一个图片放进去?
在相应函数中就直接判断的void CControlDlg::OnTimer(UINT nIDEvent)
{
if(nIDEvent==1)
{
.....
}
if(nIDEvent==2)
{
.....
}
}
IDT_TIMER1, // timer identifier
10000, // 10-second interval
(TIMERPROC) NULL); // no timer callback
SetTimer(hwnd, // handle to main window
IDT_TIMER2, // timer identifier
300000, // 5-minute interval
(TIMERPROC) NULL); // no timer callback case WM_TIMER:
switch (wParam)
{
case IDT_TIMER1:
// Process the 10-second timer.
return 0;
case IDT_TIMER2:
// Process the 5-minute timer. return 0;
}
按理说你这也没错
{
..
}
else if(nIDEvent==2)
{
..
}
void CClassNameDlg::OnTimer(UINT nIDEvent)
{
switch(nIDEvent)
{
case 1:
...
break;
case 2:
...
break;
}
CDialog::OnTimer(nIDEvent)
}
另外,楼主,当你把调试断点设置在OnTimer里面的时候,其实Timer线程是不会停止的,结果就是之后Timer线程并不是按你设定的时间到达的。