WSAWaitForMultipleEvents

熟悉WSAEventSelect模型的朋友對這個函式肯定不會陌生,不對,其實大家都不應該陌生,這個函式與執行緒中常用的WaitForMultipleObjects函式有些地方還是比較像的,因為都是在等待某個事件的觸發嘛。

基本介紹

  • 中文名:WSAWaitForMultipleEvents
  • 性質:函式
  • 所屬:WSAEventSelect模型
  • 相似函式:WaitForMultipleObjects函式
簡介,注意,

簡介

WSAWaitForMultipleEvents函式
因為我們需要事件來通知我們重疊操作的完成,所以自然需要這個等待事件的函式與之配套。
DWORD WSAWaitForMultipleEvents(
DWORD cEvents, // 等候事件的總數量
const WSAEVENT* lphEvents, // 事件數組指針
BOOL fWaitAll, // 這個要多說兩句:
// 如果設定為 TRUE,則事件數組中所有事件被傳信的時候函式才會返回
// FALSE則任何一個事件被傳信函式都要返回
// 我們這裡肯定是要設定為FALSE的
DWORD dwTimeout, // 逾時時間,如果逾時,函式會返回 WSA_WAIT_TIMEOUT
// 如果設定為0,函式會立即返回
// 如果設定為 WSA_INFINITE只有在某一個事件被傳信後才會返回,
//則WSAWaitForMultipleEvents 永遠等待,不會出現逾時現象。
BOOL fAlertable
//該值指定執行緒是否為alertable等待狀態,此時系統能執行一些I/O 完成例程。如果值為真,當系統執行I/O //完成例程時執行緒被處於altertable 等待狀態且WSAWaitForMultipleEvents 返回。在這種情況下,返回
//WSA_WAIT_IO_COMPLETION ,並且等待的event 不會觸發信號狀態。程式必須重新調用
//WSAWaitForMultipleEvents 函式。如果為false,執行緒不處於altertable 等待狀態,
//並且I/O 完成例程不會執行。
);
返回值:
WSA_WAIT_TIMEOUT :最常見的返回值,我們需要做的就是繼續Wait
WSA_WAIT_FAILED : 出現了錯誤,請檢查cEvents和lphEvents兩個參數是否有效
如果事件數組中有某一個事件被傳信了,函式會返回這個事件的索引值,但是這個索引值需要減去預定義值 WSA_WAIT_EVENT_0才是這個事件在事件數組中的位置。
具體的例子就先不在這裡舉了,後面還會講到

注意

:WSAWaitForMultipleEvents函式只能支持由WSA_MAXIMUM_WAIT_EVENTS對象定義的一個最大值,是 64,就是說WSAWaitForMultipleEvents只能等待64個事件,如果想同時等待多於64個事件,就要 創建額外的工作者執行緒,就不得不去管理一個執行緒池

相關詞條

熱門詞條

聯絡我們