2009-07-28 47 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的调用。