电脑定时器如何精准设置
2015-09-19
软件教程
来自:
未知
有朋友问我,“小兵以太网测试仪”这个软件,是如何控制发包频率的。
我想想,干脆写一篇文章来聊聊这个问题吧。 windows下,每当一个程序设定的定时器时间到了,windows会给程序发送一个WM_TIMER消息。 根据著名的windows编程书籍《Windows程序设计》的描述(在第8章), 我们知道,windows的定时器有如下的缺陷: 1. 精度不高 windows98大概是55ms,Windows NT大概是10ms。 2. WM_TIMER消息可能无法及时处理 WM_TIMER消息和其他消息一样,存放在正常的消息队列之中。如果程序处理其他消息,用了太长的时间,就耽误了WM_TIMER消息的处理,从效果上看就相当于定时器来晚了。 3. WM_TIMER消息可能会有遗漏 这样一来,如果一个windows程序在时间方面有苛刻的要求(例如,测试仪之类的软件),怎么办呢。 “小兵以太网测试仪”采用的是如下的笨方法。 这种方法非常简单,但也确实有效。下面是此方法的伪代码。 interval=x; //所需的时间间隔 next_do_work_time=当前时间; while (!need_stop) { do { cur_time=当前时间; } while (!need_stop && cur_time<next_do_work_time); if (need_stop) break; DO_WORK(); next_do_work_time+=interval; } 需要说明的是,这种方法是很消耗CPU的 :) |