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函數,向每個工作者線程都發送—個特殊的完成數據包。該函數會指示每個線程都“立即結束並退出”.

出自:http://hi.baidu.com/drunkdream/item/b4b4b649dd6c9b0fc01613ac

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

PostQueuedCompletionStatus(lvIOPort, 0, 0, nil);

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

>>>>>>

我的理解是:

想IO端口中發送一個數據包到隊列中.會觸發一個GetQueuedCompletionStatus有返回值,並不會所有的線程中的GetQueuedCompletionStatus有返回值。

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM