Sleep和WaitForSingleObject,WaitForMultipleObjects
Sleep和WaitForSingleObject,WaitForMultipleObjects
來源:考試大 【考試大:助你考試通關,掌握未來】 2008年10月1日
VOID Sleep(DWORD dwMilliseconds); 該函式可使執行緒暫停自己的執行,直到dwMilliseconds過去為止。
關於Sleep函式,有下面幾個重要問題值得注意:
* 呼叫Sleep,可使執行緒自願放棄它剩餘的時間片。
* 系統將在大約的指定毫秒數內使執行緒不可排程。
* 你可以呼叫Sleep,並且為dwMilliseconds引數傳遞INFINITE。這將告訴系統永遠不要排程該執行緒。這不是一件值得去做的事情。最好是讓執行緒退出,並還原它的堆疊和核心物件。
* 你可以將0傳遞給Sleep。這將告訴系統,呼叫執行緒將釋放剩餘的時間片,並迫使系統排程另一個執行緒。但是,系統可以對剛剛呼叫Sleep的執行緒重新排程。如果不存在多個擁有相同優先順序的可排程執行緒,就會出現這種情況。
等待函式可使執行緒自願進入等待狀態,直到一個特定的核心物件變為已通知狀態為止。這些等待函式中最常用的是WaitForSingleObject 和WaitForMultipleObjects。
WaitForSingleObject函式:
DWORD WaitForSingleObject(HANDLE hObject, // 等待的核心物件
DWORD dwTimeout ) ; // 執行緒願意等待的毫秒數(值為INFINITE時表示無限等待)
返回值:
返回值 定義 含義
WAIT_OBJECT_0 0x00000000 物件達到有訊號
WAIT_TIMEOUT 0x00000102 物件沒有在dwTimeout毫秒內 到達有訊號狀態
WAIT_ABANDONED 0x00000080 物件是一個互斥量,由於它被放棄了而達到有訊號狀態
WAIT_FAILED 0xFFFFFFFF 發生錯誤。呼叫GetLastError以取得擴充套件的錯誤資訊
WaitForMultipleObject函式:
DWORD WaitForMultipleObject(DWORD cObject, // 檢查核心物件的數目
LPHANDLE lpHandles, // 指向這些物件的控制程式碼的陣列
BOOL bWaitAll, // 是否等待所有物件變成有訊號
DWORD dwTimeout); // 執行緒願意等待的時間(毫秒數)
返回值:
返回值 定義 含義
WAIT_OBJECT_0到
(WAIT_OBJECT_0+cObjects-1) 0x00000000 開始當等待所有物件時,這一值表明等待物件成功的完成了。當等待任一物件
時,這一值給出 lpHandles陣列中屬於變成有訊號的物件的下標。
WAIT_TIMEOUT 0x00000102 物件或物件們沒有在dwTimeout毫秒內達到有訊號狀態。
WAIT_ABANDONED_0到
(WAIT_ABANDONED_0+cObjects-1)
開始於0x00000080 當等待所有物件時,這一值指明WAIT_ABANDONED_0等待成功的完成,並且至少有一個物件是互斥量,此互斥量是由於被放棄而達到有訊號的。當等待任一物件時,這一值給出lpHandles陣列中屬於變得有訊號的互斥量的控制程式碼的下標,此互斥量由於被放棄而達到有訊號。
WAIT_FAILED 0xFFFFFFFF 發生錯誤。 呼叫GetLastError以取得擴充套件的錯誤資訊。
來源:考試大 【考試大:助你考試通關,掌握未來】 2008年10月1日
VOID Sleep(DWORD dwMilliseconds); 該函式可使執行緒暫停自己的執行,直到dwMilliseconds過去為止。
關於Sleep函式,有下面幾個重要問題值得注意:
* 呼叫Sleep,可使執行緒自願放棄它剩餘的時間片。
* 系統將在大約的指定毫秒數內使執行緒不可排程。
* 你可以呼叫Sleep,並且為dwMilliseconds引數傳遞INFINITE。這將告訴系統永遠不要排程該執行緒。這不是一件值得去做的事情。最好是讓執行緒退出,並還原它的堆疊和核心物件。
* 你可以將0傳遞給Sleep。這將告訴系統,呼叫執行緒將釋放剩餘的時間片,並迫使系統排程另一個執行緒。但是,系統可以對剛剛呼叫Sleep的執行緒重新排程。如果不存在多個擁有相同優先順序的可排程執行緒,就會出現這種情況。
等待函式可使執行緒自願進入等待狀態,直到一個特定的核心物件變為已通知狀態為止。這些等待函式中最常用的是WaitForSingleObject 和WaitForMultipleObjects。
WaitForSingleObject函式:
DWORD WaitForSingleObject(HANDLE hObject, // 等待的核心物件
DWORD dwTimeout ) ; // 執行緒願意等待的毫秒數(值為INFINITE時表示無限等待)
返回值:
返回值 定義 含義
WAIT_OBJECT_0 0x00000000 物件達到有訊號
WAIT_TIMEOUT 0x00000102 物件沒有在dwTimeout毫秒內 到達有訊號狀態
WAIT_ABANDONED 0x00000080 物件是一個互斥量,由於它被放棄了而達到有訊號狀態
WAIT_FAILED 0xFFFFFFFF 發生錯誤。呼叫GetLastError以取得擴充套件的錯誤資訊
WaitForMultipleObject函式:
DWORD WaitForMultipleObject(DWORD cObject, // 檢查核心物件的數目
LPHANDLE lpHandles, // 指向這些物件的控制程式碼的陣列
BOOL bWaitAll, // 是否等待所有物件變成有訊號
DWORD dwTimeout); // 執行緒願意等待的時間(毫秒數)
返回值:
返回值 定義 含義
WAIT_OBJECT_0到
(WAIT_OBJECT_0+cObjects-1) 0x00000000 開始當等待所有物件時,這一值表明等待物件成功的完成了。當等待任一物件
時,這一值給出 lpHandles陣列中屬於變成有訊號的物件的下標。
WAIT_TIMEOUT 0x00000102 物件或物件們沒有在dwTimeout毫秒內達到有訊號狀態。
WAIT_ABANDONED_0到
(WAIT_ABANDONED_0+cObjects-1)
開始於0x00000080 當等待所有物件時,這一值指明WAIT_ABANDONED_0等待成功的完成,並且至少有一個物件是互斥量,此互斥量是由於被放棄而達到有訊號的。當等待任一物件時,這一值給出lpHandles陣列中屬於變得有訊號的互斥量的控制程式碼的下標,此互斥量由於被放棄而達到有訊號。
WAIT_FAILED 0xFFFFFFFF 發生錯誤。 呼叫GetLastError以取得擴充套件的錯誤資訊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-704362/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在主執行緒中慎用WaitForSingleObject (WaitForMultipleObjects)執行緒AIObjectORM
- WaitForMultipleObjectsAIORMObject
- sleep()和wait()區別AI
- java yield()和sleep()的區別Java
- Linux作業系統 sleep(0)、sleep(1)和sleep(-1)的區別,他們各有什麼作用Linux作業系統
- 延時函式delay() sleep() Sleep()函式
- Systrace 執行緒 CPU 執行狀態分析技巧 - Sleep 和 Uninterruptible Sleep 篇執行緒
- WaitForSingleObject、WaitForMulitpleObjects和SignalObjectAndWait執行緒同步AIObjectORM執行緒
- linux的sleep()和usleep()的使用和區別Linux
- 【Java】sleep和wait區別總結JavaAI
- 一題帶你徹底理解sleep()和wait()AI
- Linux中的sleep、usleep、nanosleep、poll和selectLinuxNaN
- Linux中Sleep和Wait命令的使用方式LinuxAI
- java基礎:執行緒方法之interrupt和sleepJava執行緒
- Task.Delay 和 Thread.Sleep 的區別thread
- 執行緒-sleep()執行緒
- wait() vs sleep()AI
- WaitForSingleObject -- setevent 講解與程式設計示例AIObject程式設計
- 執行緒狀態&&Wait和sleep的區別?執行緒AI
- kill-mysql-sleep.shMySql
- 深入Thread.sleepthread
- 在Qt中使用sleepQT
- sleep & wait | notify | notifyAllAI
- js模擬Sleep/DelayJS
- Java_Thread類的sleep()與SystemClock類的sleep()的區別Javathread
- sleep與 wait區別AI
- kill_mysql_sleep_threadMySqlthread
- JUC 原始碼講解:sleep()原始碼
- 理解 Thread.Sleep 函式thread函式
- Bash: sleep - 延遲指定時間
- oracle DBMS_LOCK.SLEEP()的使用Oracle
- C# suspend sleep join 區別C#
- windows執行緒yield以及Sleep(0)和SwitchToThread之間的區別Windows執行緒thread
- Thead物件的sleep方法,和yield方法有何區別,為什麼實現的執行緒中,在run方法中要呼叫sleep方法?物件執行緒
- Informix 執行緒sleep 分析過程ORM執行緒
- Thread 的sleep、wait、yield、interruptthreadAI
- DB2 PL/SQL Example: Sleep ProcedureDB2SQL
- 請教sleep()與yield()的區別