Delphi:如何锁定“Socket.Write”并解锁?

时间:2011-12-09 00:26:01

标签: multithreading delphi indy

我有几个客户端,写入一个套接字(而不是端口),当他们一起写入时,我收到垃圾,所有客户端的所有数据都被合并。

所有客户端都在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

1 个答案:

答案 0 :(得分:2)

您可以使用TCriticalSectionSyncObjs单位):将Write放在EnterLeave之间:

CriticalSection.Enter;
try
  ASocket.Connection.Socket.Write(buf);
finally
  CriticalSection.Leave;
end;

方法AcquireRelease执行相同的操作(doc)。重要提示:如果您在代码的多个点处写入套接字,则必须使用相同的对象(我在上例中称为CriticalSection)。