天天看點

Delphi-IOCP學習筆記<二>====IOCP基本函數介紹和了解

經過研究代碼,覺得有幾個函數必須要清楚原理。才能了解代碼,清楚流程。

異步模式:類似form.show();

阻塞模式:類似form.showModal();

WSAAccept;

當用戶端有連接配接請求的時候,WSAAccept函數會新建立一個套接字cSocket。

其他的參數可以檢視MSDN,和google。

需要說明的一點是這個函數不是異步的,是阻塞模式。

WSARecv;

收取socket的資料

這個函數是異步模式,執行後馬上傳回。

資料接收到後,GetQueuedCompletionStatus,會傳回

GetQueuedCompletionStatus:

實作從指定的IOCP請求隊列中擷取請求。

當隊列為空時,對此函數的調用将被阻塞。

當隊列不為空時,被阻塞的線程将以後進先出(LIFO)順序被請求出去.

PostQueuedCompletionStatus:

CSDN上面的解釋

Posts an I/O completion packet to an I/O completion port.

向IO完成端口Post一個I/O完成資料包。

//也有一個blogs上面是這樣解釋

>>>PostQueuedCompletionStatus函數,向每個工作者線程都發送—個特殊的完成資料包。該函數會訓示每個線程都“立即結束并退出”.

>>>>我做個一個這樣的測試在Accept連接配接後,執行PostQueuedCompletionStatus,

PostQueuedCompletionStatus(lvIOPort, 0, 0, nil);

開啟有7個工作線程.隻有一個線程的GetQueuedCompletionStatus,有傳回值。

>>>>>>

我的了解是:

想IO端口中發送一個資料包到隊列中.會觸發一個GetQueuedCompletionStatus有傳回值,并不會所有的線程中的GetQueuedCompletionStatus有傳回值。

下一節,研究,這幾個函數的實際使用

繼續閱讀