Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi ScktComp:何时触发onWrite事件?_Delphi_Sockets - Fatal编程技术网

Delphi ScktComp:何时触发onWrite事件?

Delphi ScktComp:何时触发onWrite事件?,delphi,sockets,Delphi,Sockets,当我通过SendBuf()将字节直接写入套接字连接时,我认为ClientSocket的onWrite事件是多余的 我的想法是在沙漠的某个地方吗? Delphi文档也有点糟糕,因为它只是说:“为onWrite事件编写一个例程以写入套接字连接。”当您使用异步IO时(换句话说,当您使用ClientType=ctNonBlocking时),会使用onWrite。当套接字准备好让您发送数据时,就会调用它 因此,您的想法只有一半是空中楼阁:如果您使用的是ctBlocking,那么就根本不用担心OnWrite

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

我的想法是在沙漠的某个地方吗?


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

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

因此,您的想法只有一半是空中楼阁:如果您使用的是ctBlocking,那么就根本不用担心OnWrite了。如果您需要该线程同时发送数据和处理其他内容,那么使用ctNonBlocking并在OnWrite中写入套接字

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

这里的神奇成分是在TCustomWinSocket.DoSetAsyncStyles中调用