读书人

SetTimer的时间精度有关问题

发布时间: 2012-05-23 13:44:13 作者: rapoo

SetTimer的时间精度问题
今天用SetTimer作为一个计时器,固定时间向另外一个线程发送消息,可是发现Timer的时间精度非常差。测试中我用33ms 来设定SetTimer,得到的时间间隔却是47ms;用50ms得到的时间间隔却是63ms。
为什么会出现这么大的偏差我不知道。不过只是确确实实的情况。
请问还有什么其它的方法可以比较准确的进行计时吗?
另外固定被通知的线程是继承于CWinThread的,这个线程本身就有消息循环,是否可以在该线程中设定一个计时器呢?

[解决办法]
SetTimer线程优先级别很低,要等其它的线程执行完后运行它,所以精度度很差,用于要求不高的场合。如果要求高的话可以采用多媒体定时或更高级别的定时方法。
[解决办法]
定时器只有30豪秒左右的精度
多任务,时间片轮循...精度可能很难保证

可以在任何线程中放置定时器

有时候,也可以通过为线程的循环配置超时条件(如WaitForSingleObject)来代替定时器,对系统的耗费更低,处理得好,能略为提高响应精度
[解决办法]
WM_TIMER消息的优先级比较低,当消息队列里没有其它待处理的高优先级的消息的时候,才会去处理它,如果你的应用程序很繁忙,那么延迟就会很明显。

The WM_TIMER message is a low-priority message. The GetMessage and PeekMessage functions post this message only when no other higher-priority messages are in the thread's message queue.
[解决办法]
timeBeginPeriod可调节中断频率
间隔时间不可能比中断周期还精细,因为计时器最准确也就是每个时钟中断时检查是否到期

读书人网 >VC/MFC

热点推荐