如何让线程空闲时不占用CPU资源

feixiangmenghuan 2019-01-15 01:06:24
需求是:我有10个一样的线程(函数内容一致,只是触发的点位不同) 去与主线程同步,在没有任务的时候,希望线程处于空闲时态,不占用CPU资源,但不能SLEEP,有主线程任务到来时,线程能够立即执行。
当然我知道在一般情况下,空闲时就让线程睡眠,但是线程进入睡眠之后,什么时候再获得CPU控制权是由操作系统决定的,当任务到达时,线程并不能立即唤醒执行,这样的话就算是Sleep(1)毫秒也不能满足要求。
...全文
727 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sichuanwww 2019-01-26
  • 打赏
  • 举报
回复
woshi_hujunjun 2019-01-19
  • 打赏
  • 举报
回复
WaitForMultipleObjects 的用法看一下帮助文档就清楚了,
DWORD WaitForMultipleObjects(
DWORD nCount, //时间个数
const HANDLE* lpHandles, //事件列表
BOOL bWaitAll, //所有事件满足才返回,还是一个事件满足就返回
DWORD dwMilliseconds //超时时间
);

返回值 :第一事件满足,返回WAIT_OBJECT_0,第二个+1就好,依次类推
feixiangmenghuan 2019-01-17
  • 打赏
  • 举报
回复
等待多个事件的话用WaitForMultipleObjects
注意WaitForMultipleObjects返回的时候不一定只有一个事件处于有信号状态。


多个事件处于有信号状态 怎么处理 大神们 急
CT8100 2019-01-17
  • 打赏
  • 举报
回复
Sleep...
蒋晟 2019-01-15
  • 打赏
  • 举报
回复
等待多个事件的话用WaitForMultipleObjects 注意WaitForMultipleObjects返回的时候不一定只有一个事件处于有信号状态。
zgl7903 2019-01-15
  • 打赏
  • 举报
回复
在for 外面等事件不可以?

while(1)
{
HANDLE hEventArray[] = { hExitEvent, hDoEvent };
DWORD dwWait = WaitForMultipleObjects(2, hEventArray, FALSE, INFINITE);
switch(dwWait)
{
case(WAIT_OBJECT_0 + 0): //exit event
{
return 1;
}
case(WAIT_OBJECT_0 + 1): //do event
{
//add you code here
break;
}
default: //unexcept
{
ASSERT(0);
retrun -1;
}
}
}
feixiangmenghuan 2019-01-15
  • 打赏
  • 举报
回复

(WaitForSingleObject 等待 Event) 我有十个条件 怎么去设置等待的事件 条件是在for循环里判定的?
worldy 2019-01-15
  • 打赏
  • 举报
回复
1ms你都不能延误,意味着你需要一直监视任务是否到达,意味着需要一直占用CPU资源。。。。

死循环会一直占用CPU,一般,睡眠逻辑为:

while(1)
{
if(NoTask)
sleep(n);
else
doTask();
}
zgl7903 2019-01-15
  • 打赏
  • 举报
回复
WaitForSingleObject 等待 Event

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧