如何让线程空闲时不占用CPU资源,但不能Sleep,类似于System Idle进程 本帖最后由 vatajoan 于 2013-10-09 10:59:17 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 每一个线程都有一个消息队列,你可以添加一个GetMessage消息循环,这样处理任务时通过给线程发送消息,没有消息时就一直等待, 这个很明显,使用线程同步对象。比如事件对象。线程在没有任务的时候设置事件为无信号,并等待事件。此时线程被阻塞在那里,不消耗CPU资源。有任务来的时候,设置事件为有信号,线程马上被释放,继续执行。 使用内核同步对象的效率还没有使用Sleep的高啊 使用内核同步对象唤醒线程,还没有使线程Sleep(1)定时查询的效率高 消息队列就一定要和窗口扯上关系吗?无语!个人也只是个建议而已,不然就用事件等内核对象,然后WaitForSingleObject等待 想达到实时唤醒, 那是不可能的, 就算你优先级再高的线程也会被分配时间片, 有时间片轮转.可以使用事件, Wait,事件有信号, 有信号就开始"可以"执行.也可以让线程暂停, 然后可以执行的时候再让其继续, 但这样不好控制代码的执行. 请问,什么样的业务连一毫秒的延迟都不能容忍?我想破脑袋都没想到有什么方法能够控制1ms以内。wait之类同样需要等待时间片,本人对你所需的业务表示怀疑 1. 消息队列和窗口扯不上关系,单独创建的线程为什么不能有消息队列? 当然不是说支持消息队列的方式,而是觉得楼主的理解可能有问题。这里顶下jzycode2. Windows不是实时操作系统,楼主如果有这么苛刻的要求,是不是考虑不用Windows啊 表面上看起来多么不同的任何办法,本质都是消息驱动Wait...Object可能是相对比较友好的办法 Sleep(1)定时查询的效率高是低效的。大量时间都用于定时查询了。 要求有点高,而且好像不占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 ); 以后工作都是在linux 了 ,以后不来VC了,散分 请问下串口通信,怎样能实现自适波特率通信 新手 求助! sockaddr_storage结构在什么头文件里定义? 有vc群吗?要求可以加入的。 大家讨论一下SOCKET通信的多客户端处理,讲讲自己是怎样实现的 关于fopen函数与不同系统之间运行时得问题 为什么我在列表中显示的图标透明的地方都是黑色的? C的基础问题,你行吗? 我的debug和release版本编译都没有问题,可是在没有安装VC的机器上就是不能运行? 线程中使用printf出现的问题 控件需求
线程在没有任务的时候设置事件为无信号,并等待事件。
此时线程被阻塞在那里,不消耗CPU资源。
有任务来的时候,设置事件为有信号,线程马上被释放,继续执行。
当然不是说支持消息队列的方式,而是觉得楼主的理解可能有问题。这里顶下jzycode
2. Windows不是实时操作系统,楼主如果有这么苛刻的要求,是不是考虑不用Windows啊
Wait...Object可能是相对比较友好的办法
大量时间都用于定时查询了。
可以用Sleep(0),然后把线程优先级设到最高
//=========================================================================
// 函数名称: 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 );