需求是:我有10个一样的线程(函数内容一致,只是触发的点位不同) 去与主线程同步,在没有任务的时候,希望线程处于空闲时态,不占用CPU资源,但不能SLEEP,有主线程任务到来时,线程能够立即执行。
当然我知道在一般情况下,空闲时就让线程睡眠,但是线程进入睡眠之后,什么时候再获得CPU控制权是由操作系统决定的,当任务到达时,线程并不能立即唤醒执行,这样的话就算是Sleep(1)毫秒也不能满足要求。
当然我知道在一般情况下,空闲时就让线程睡眠,但是线程进入睡眠之后,什么时候再获得CPU控制权是由操作系统决定的,当任务到达时,线程并不能立即唤醒执行,这样的话就算是Sleep(1)毫秒也不能满足要求。
{
if(NoTask)
sleep(n);
else
doTask();
}
(WaitForSingleObject 等待 Event) 我有十个条件 怎么去设置等待的事件 条件是在for循环里判定的?
{
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;
}
}
}
注意WaitForMultipleObjects返回的时候不一定只有一个事件处于有信号状态。
注意WaitForMultipleObjects返回的时候不一定只有一个事件处于有信号状态。
多个事件处于有信号状态 怎么处理 大神们 急
DWORD WaitForMultipleObjects(
DWORD nCount, //时间个数
const HANDLE* lpHandles, //事件列表
BOOL bWaitAll, //所有事件满足才返回,还是一个事件满足就返回
DWORD dwMilliseconds //超时时间
);返回值 :第一事件满足,返回WAIT_OBJECT_0,第二个+1就好,依次类推