Sleep和WaitForSingleObject,WaitForMultipleObjects

ForTechnology發表於2011-08-07
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以取得擴充套件的錯誤資訊。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-704362/,如需轉載,請註明出處,否則將追究法律責任。

相關文章