怎么让线程空闲时不占用CPU资源,但不能Sleep,类似于System Idle进程

如何让线程空闲时不占用CPU资源,但不能Sleep,类似于System Idle进程
本帖最后由 vatajoan 于 2013-10-09 10:59:17 编辑
    需求是:线程池中有四个线程,在没有任务的时候,希望线程处于空闲时态,不占用CPU资源,但不能SLEEP,有任务到来时,线程能够立即执行。
    当然我知道在一般情况下,空闲时就让线程睡眠,但是线程进入睡眠之后,什么时候再获得CPU控制权是由操作系统决定的,当任务到达时,线程并不能立即唤醒执行,这样的话就算是Sleep(1)毫秒也不能满足要求。
    希望大家广泛发言,提供一切想法和意见。
线程,睡眠,立即执行

------解决方案--------------------
消息队列就一定要和窗口扯上关系吗?无语!个人也只是个建议而已,不然就用事件等内核对象,然后WaitForSingleObject等待
------解决方案--------------------
SleepEx 或者等待事件


------解决方案--------------------
想达到实时唤醒, 那是不可能的, 就算你优先级再高的线程也会被分配时间片, 有时间片轮转.

可以使用事件, Wait,事件有信号, 有信号就开始"可以"执行.

也可以让线程暂停, 然后可以执行的时候再让其继续, 但这样不好控制代码的执行.
------解决方案--------------------
Wait for Event
------解决方案--------------------
1. 消息队列和窗口扯不上关系,单独创建的线程为什么不能有消息队列?
   当然不是说支持消息队列的方式,而是觉得楼主的理解可能有问题。这里顶下jzycode
2. Windows不是实时操作系统,楼主如果有这么苛刻的要求,是不是考虑不用Windows啊
------解决方案--------------------
表面上看起来多么不同的任何办法,本质都是消息驱动
Wait...Object可能是相对比较友好的办法
------解决方案--------------------
要求有点高,而且好像不占CPU和实时唤醒在普通的操作系统是矛盾的。
可以用Sleep(0),然后把线程优先级设到最高
------解决方案--------------------
https://code.csdn.net/kingsollyu/libx
		//=========================================================================
// 函数名称: SuperSleep
// 函数说明: void  高精度延时,cpu占用低,窗口不卡死,一次最大可延时几年 
//=========================================================================
// 参    数: __in int nTime 1000微秒 = 1毫秒 ; 1000毫秒 = 1秒
// 参    数: __in int nSpeed 可空:毫秒  1:微秒 2:毫秒 3:秒  4:分  5:小时  6:天
//=========================================================================
void SuperSleep(__in int nTime,__in int nSpeed );