标签:
解决上一节中延时函数占CPU使用率(达50%)的第二种方法是利用消息机制,通过API函数MsgWaitForMultipleObjects等待消息或超时的到来,从而避免使用循环检测使CPU占用率过高。完整的改进版Delay函数代码如下:
以下是MSDN中关于MsgWaitForMultipleObjects的一段说明:
The MsgWaitForMultipleObjects function determines whether the wait criteria have been met. If the criteria have not been met, the calling thread enters an efficient wait state, using very little processor time while waiting for the conditions of the wait criteria to be met.
MsgWaitForMultipleObjects判断等待条件(即返回条件)是否满足,如果不满足,调用线程(在此即主线程)进入高效的等待状态:使用非常少的CPU时间来等候返回条件成立。
更多关于MsgWaitForMultipleObjects的介绍请参见http://msdn.microsoft.com/zh-cn/library/ms931460
利用以上提到的三个函数:Sleep、Delay、改进的Delay,进行了一个简单的测试,结果截图如下:
(1) 使用Sleep
(2)使用Delay
(3)使用改进版Delay
① Sleep函数挂起了程序,使界面和定时器都得不到响应,当然更不会占用CPU了。
② Delay函数采用循环检测方式,虽然界面能得到及时响应,但在延时的5秒时间内CPU占用率达到了50%。
③ 改进的Delay函数即能响应界面,CPU使用率也很低(几乎为0,只在有指定输入消息到达时才有1%)。
④ 后两个函数对于窗体关闭消息也不能及时响应。
http://blog.csdn.net/tht2009/article/details/6685622
改进的延时函数Delay(使用MsgWaitForMultipleObjects等待消息或超时的到来)
标签:
原文地址:http://www.cnblogs.com/findumars/p/5008558.html