WaitForSingleObject函式的使用

2021-07-15 12:19:36 字數 2503 閱讀 7331

等待函式可使執行緒自願進入等待狀態,直到乙個特定的核心物件變為已通知狀態為止。

waitforsingleobject

函式

dword waitforsingleobject(

handle hobject,

dword dwmilliseconds);

第乙個引數hobject標識乙個能夠支援被通知/未通知的核心物件(前面列出的任何一種物件都適用)。

第二個引數

dwmilliseconds

允許該執行緒指明,為了等待該物件變為已通知狀態,它將等待多長時間。(

infinite

為無限時間量,infinite已經定義為0xffffffff(或-1)) 傳遞

infinite

有些危險

。如果物件永遠不變為已通知狀態,那麼呼叫執行緒永遠不會被喚醒,它將永遠處於死鎖狀態,不過,它不會浪費寶貴的

c p u

時間。

例子:

dword dw = waitforsingleobject(hprocess, 5000);

switch(

dw)

上面這個**告訴系統,在特定的程序(

hprocess

)終止執行(程序

hprocess

終止執行變成已經通知

)之前,或者在5000m s時間結束之前,呼叫執行緒不應該變為可排程狀態。

waitforsingleobject

的返回值能夠指明呼叫執行緒為什麼再次變為可排程狀態。

如果執行緒等待的物件變為已通知狀態,那麼返回值是

wait_object_0。

如果設定的超時已經到期,則返回值是

wait_timeout。

如果將乙個錯誤的值(如乙個無效控制代碼)傳遞給waitforsingleobject,那麼返回值將是

wait_failed

(若要了解詳細資訊,可呼叫getlasterror)。

waitformultipleobjects

函式

waitformultipleobjects函式與waitforsingleobject函式很相似,區別在於它允許呼叫執行緒同時檢視若干個核心物件的已通知狀態:

dword waitformultipleobjects(

dword dwcount,

const handle* phobjects,

bool fwaitall,

dword dwmilliseconds

);dwcount

引數用於指明想要讓函式檢視的核心物件的數量。這個值必須在1與maximu m_wait_objects(在windows標頭檔案中定義為64)之間。

phobjects

引數是指向核心物件控制代碼的陣列的指標。

可以以兩種不同的方式來使用

waitformultipleobjects函式。

一種方式是

讓執行緒進入等待狀態,直到指定核心物件中的任何乙個變為已通知狀態。

另一種方式是

讓執行緒進入等待狀態,直到所有指定的核心物件都變為已通知狀態。

fwaitall

引數告訴該函式,你想要讓它使用何種方式。如果為該引數傳遞true,那麼在所有物件變為已通知狀態之前,該函式將不允許呼叫執行緒執行。

dwmilliseconds

引數的作用與它在waitforsingleobject中的作用完全相同。如果在等待的時候規定的時間到了,那麼該函式無論如何都會返回。。

waitformultipleobjects

函式的返回值告訴呼叫執行緒

,為什麼它會被重新排程。可能的返回值是

wait_failed

和wait_timeout

。如果為fwaital l引數傳遞true,同時所有物件均變為已通知狀態,那麼返回值是

wait_object_0

。如果為fwaitall傳遞false,那麼一旦任何乙個物件變為已通知狀態,該函式便返回。在這種情況下,你可能想要知道哪個物件變為已通知狀態。返回值是

wait_object_0

與(wait_oject_0 + dwcount-1

)之間的乙個值。換句話說,如果返回值不是wait_timeout,也不是wait_failed,那麼應該從返回值中減去wait_object_0。產生的數字是作為第二個引數傳遞給waitformultipleobjects的控制代碼陣列中的索引。該索引說明哪個物件變為已通知狀態。

下面是說明這一情況的一些示例**

handle h[3];

h[0] = hprocess1;

h[1] = hprocess2;

h[2] = hprocess3;

dword dw = waitformultipleobjects(3, h, false, 5000);

switch(dw)

**

WaitForSingleObject的通俗講解!

用最簡單的語言說就是這個物件有兩個狀態比如我們稱0和1,稱什麼一點也不重要,有訊號和無訊號就是相對的兩個狀態,沒什麼意義,你就認為乙個狀態是0另乙個狀態是1。在程式裡如果加了waitforsingleobject,那麼程式到這裡就去檢測你給他的那個控制代碼的狀態,如果是0程式就停在這裡了,如果是1,...

WaitForSingleObject的詳細用法

在多執行緒的情況下,有時候我們會希望等待某一線程完成了再繼續做其他事情,要實現這個目的,可以使用windows api函式waitforsingleobject,或者waitformultipleobjects。這兩個函式都會等待object被標為有訊號 signaled 時才返回的。那麼,訊號是什...

WaitForSingleObject的詳細用法

使用者模式的執行緒同步機制效率高,如果需要考慮執行緒同步問題,應該首先考慮使用者模式的執行緒同步方法。但是,使用者模式的執行緒同步有限制,對於多個程序之間的執行緒同步,使用者模式的執行緒同步方法無能為力。這時,只能考慮使用核心模式。windows提供了許多核心物件來實現執行緒的同步。對於執行緒同步而...