关于VC中使用定时器时如何进行调试的疑问

zp2000 2009-03-14 09:51:01
我用了两个定时器,一个是1000ms的一个是25ms的,两者同时打开,按理说,应该是先执行25ms的定时器消息,并且该消息要发送近40次,才会出现一个100ms的定时消息,但是我在调试的过程中发现,25ms的消息和1000ms的消息是交替着送进来的,这两者的消息处理函数都在OnTimer内,我没有进行任何操作,就是调试着来看一看,不会影响到执行速度,问题就在于,对于定时器这类程序,调试的时候是否准确啊?因为程序的单步执行,是否造成了定时器的定时时间到了啊?
...全文
201 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
txzsp 2011-11-11
  • 打赏
  • 举报
回复
给LZ推荐一个VC的定时器使用,有源码和大量注释,LZ一定要试下:
http://download.csdn.net/detail/txzsp/2285350
zp2000 2009-03-15
  • 打赏
  • 举报
回复
哦!定时器的确是不准确,所谓的多媒体定时器是不是timesetevent这个函数啊?用这个函数大概可以得到多少精度的定时啊?我已经取消了显示界面部分的内容,直接采了数据保存在磁盘中了,以后在用MATLAB这样的程序来处理吧,实在协调不好这两者的关系,有高手能给点提示该怎么做吗?我总感觉画图来不及啊
zp2000 2009-03-14
  • 打赏
  • 举报
回复
楼上的兄弟说的很对啊,我采用了用写文件的方法输出到文件中来查看,发现有如下的疑问:
还是那两个定时器:
SetTimer(1,1000,NULL);
SetTimer(2,25,NULL);

在OnTimer中,如果是定时器2的消息,就往文件写2,如果是定时器1的消息就写1,执行(非调试)的时候发现,基本上是每隔30个2就出一次1,这30个2代表过了的时间是:750ms,这时就出一个1,也就是1000ms,那剩下的250ms哪里去了呢?谁能回答下这个问题啊?
usons 2009-03-14
  • 打赏
  • 举报
回复
看看这个测试:

void CMy11111111Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
SetTimer(1,1000,NULL);
SetTimer(2,10000,NULL);
}

void CMy11111111Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch (nIDEvent)
{
case 1:
MessageBox ("1");
break;
case 2:
MessageBox("2");
break;
default:
break;
}
CDialog::OnTimer(nIDEvent);
}

运行的时候你会发现出了10个“1”的对话框后才出现“2”的对话框,
调试的时候如果你的F10按的快的话也会看到先有10个case1 后才出现一个case2也就是说调试时与运行时看到的是一样的,而你会出现你说的那种问题是因为你的时间定时小,在你运行你的case1的程序段时,已经超过了1000ms了,所以你就看到了交替的结果
oyljerry 2009-03-14
  • 打赏
  • 举报
回复
调试会影响消息处理等,你可以打印一些log等看看
zp2000 2009-03-14
  • 打赏
  • 举报
回复
回答楼上的啊,我是这么写的啊!关键就是我觉得两个时钟发送的消息不成比例关系啊!
oyljerry 2009-03-14
  • 打赏
  • 举报
回复
用一个定时器,然后你在OnTimer中根据TimerID来判断当前是 哪个定时器消息触发了...
zp2000 2009-03-14
  • 打赏
  • 举报
回复
写错了一点,第二行那个是1000ms,怎么找不到编辑帖子的选项啊。。。。
biweilun 2009-03-14
  • 打赏
  • 举报
回复
定时器不精确。
菜牛 2009-03-14
  • 打赏
  • 举报
回复
定时器本身就不精确,小于50ms的定时器没有意义,应该换用多媒体定时器。
S_S_Ge 2009-03-14
  • 打赏
  • 举报
回复
在两个OnTimer()里面和外面都设置断点
三个断点间调试运行

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧