on idle时的call
发布时间
阅读量:
阅读量
OnIdle 的调用
首先看GetMessage(PumpMessage中被调用)与PeekMessage的区别:
若消息队列为空,则程序会陷入GetMessage的调用阻塞状态。此时系统将会调度并处理其他进程。相比之下,在使用PeekMessage时不会触发阻塞。
在Run函数中需要解决的一个问题是,在消息队列为空时使用OnIdle方法执行一些非核心任务,并希望尽可能不影响其他进程的工作流程。
您该如何正确地使用OnIdle函数呢?如果一旦消息队列为空就立即调用OnIdle函数的行为,则类似于执行模拟死循环操作,在这种情况下会导致系统陷入长时间停滞状态。原因在于空闲的消息队列有机会频繁出现的情况较为普遍。因此建议采用以下策略:当空闲的消息队列出现时,在头几次循环中(即最初的几次迭代中)适当执行必要的OnIdle函数调用;在此之后应当让处理进程被阻塞在GetMessage函数调用的位置上,并通过使用LONG变量lIdleCount来控制CPU的时间片分配情况。
这样做还有待商榷呢?我们再回头审视一下这个思路:在消息队列为空时会立即执行OnIdle操作,并不会立即调用GetMessage函数导致阻塞。当消息到来后GetMessage将不会被阻塞,并接着必须先处理队列中的剩余消息,在完成这些工作后再返回执行OnIdle步骤呢?如果系统中设置了定时器的话可能会引发问题哦
全部评论 (0)
还没有任何评论哟~
