需求是:我有10個一樣的執行緒(函式內容一致,只是觸發的點位不同) 去與主執行緒同步,在沒有任務的時候,希望執行緒處于空閑時態,不占用CPU資源,但不能SLEEP,有主執行緒任務到來時,執行緒能夠立即執行。

當然我知道在一般情況下,空閑時就讓執行緒睡眠,但是執行緒進入睡眠之后,什么時候再獲得CPU控制權是由作業系統決定的,當任務到達時,執行緒并不能立即喚醒執行,這樣的話就算是Sleep(1)毫秒也不能滿足要求。
uj5u.com熱心網友回復:
WaitForSingleObject 等待 Eventuj5u.com熱心網友回復:
1ms你都不能延誤,意味著你需要一直監視任務是否到達,意味著需要一直占用CPU資源。。。。死回圈會一直占用CPU,一般,睡眠邏輯為:
while(1)
{
if(NoTask)
sleep(n);
else
doTask();
}
uj5u.com熱心網友回復:
(WaitForSingleObject 等待 Event) 我有十個條件 怎么去設定等待的事件 條件是在for回圈里判定的?
uj5u.com熱心網友回復:
在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;
}
}
}
uj5u.com熱心網友回復:
等待多個事件的話用WaitForMultipleObjects注意WaitForMultipleObjects回傳的時候不一定只有一個事件處于有信號狀態。
uj5u.com熱心網友回復:
Sleep...
uj5u.com熱心網友回復:
等待多個事件的話用WaitForMultipleObjects注意WaitForMultipleObjects回傳的時候不一定只有一個事件處于有信號狀態。
多個事件處于有信號狀態 怎么處理 大神們 急
uj5u.com熱心網友回復:
WaitForMultipleObjects 的用法看一下幫助檔案就清楚了,DWORD WaitForMultipleObjects(
DWORD nCount, //時間個數
const HANDLE* lpHandles, //事件串列
BOOL bWaitAll, //所有事件滿足才回傳,還是一個事件滿足就回傳
DWORD dwMilliseconds //超時時間
);
回傳值 :第一事件滿足,回傳WAIT_OBJECT_0,第二個+1就好,依次類推
uj5u.com熱心網友回復:
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/55910.html
標籤:基礎類
