我有几个客户端,写入一个套接字(而不是端口),当他们一起写入时,我收到垃圾,所有客户端的所有数据都被合并。
所有客户端都在Threads中的相同程序中。
我需要锁定write()
ASocket.Connection.Socket.LOCK; // need to be thread safe
ASocket.Connection.Socket.Write(buf);
ASocket.Connection.Socket.UNLOCK; // need to be thread safe
我该怎么做?
感谢。
Delphi 2010,Indy 10,Win7
答案 0 :(得分:2)
您可以使用TCriticalSection
(SyncObjs
单位):将Write
放在Enter
和Leave
之间:
CriticalSection.Enter;
try
ASocket.Connection.Socket.Write(buf);
finally
CriticalSection.Leave;
end;
方法Acquire
和Release
执行相同的操作(doc)。重要提示:如果您在代码的多个点处写入套接字,则必须使用相同的对象(我在上例中称为CriticalSection
)。