Delphi ScktComp:onWrite事件何时被触发?

时间:2009-07-28 08:23:46

标签: delphi sockets

当我通过SendBuf()直接将字节写入套接字连接时,我已经开始认为ClientSocket的onWrite事件是多余的。

我的观点是在沙漠中的某个地方吗?

Delphi文档也有点糟糕,因为它只是sais:“为onWrite事件写一个例程来写入套接字连接。”

1 个答案:

答案 0 :(得分:1)

当您使用异步IO时使用OnWrite(换句话说,当您使用ClientType = ctNonBlocking时)。当套接字准备好发送数据时调用它。

因此,你的想法只有沙漠的一半:如果你正在使用ctBlocking,那么根本不要打扰OnWrite。如果您需要该线程同时发送数据并继续处理其他内容,请使用ctNonBlocking并在OnWrite中写入套接字。

当您使用异步套接字时,Windows将向您的套接字发送CM_SOCKETMESSAGE,由TCustomWinSocket.CMSocketMessage处理。当该消息的SelectEvent属性设置为FD_WRITE时,(最终)调用OnWrite。

这里的神奇成分是TCustomWinSocket.DoSetAsyncStyles中对WSAAsyncSelect的调用。