2009-07-28 87 views
2

當我直接通過SendBuf()將字節寫入套接字連接時,我想到了ClientSocket的onWrite事件是多餘的。Delphi ScktComp:onWrite事件何時被觸發?

是我在沙漠某處的思考點嗎?

Delphi文檔也有些不好,因爲它只是sais:「編寫onWrite事件寫入套接字連接的例程。」

回答

1

當您使用異步IO時(換句話說,當您有ClientType = ctNonBlocking時)會使用OnWrite。它在套接字準備好發送數據時調用。因此,你的思維只有一半在沙漠中:如果你使用ctBlocking,那麼根本就不用打擾OnWrite。如果您需要該線程發送數據並同時與其他內容進行交互,請使用ctNonBlocking並寫入OnWrite中的套接字。

當您使用異步套接字時,Windows將向您的套接字發送一個由TCustomWinSocket.CMSocketMessage處理的CM_SOCKETMESSAGE套接字。當該消息的SelectEvent屬性設置爲FD_WRITE時,OnWrite(最終)會被調用。

這裏的神奇成分是對TCustomWinSocket.DoSetAsyncStyles中的WSAAsyncSelect的調用。