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

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

我该怎么做 ?

谢谢。

德尔福 2010、印地 10、Win7

最佳答案

您可以使用 TCriticalSection ( SyncObjs 单元):将 Write 放在 EnterLeave 之间:

CriticalSection.Enter;
try
  ASocket.Connection.Socket.Write(buf);
finally
  CriticalSection.Leave;
end;
AcquireRelease 方法执行相同的操作 ( doc )。重要提示:如果您在代码的多个点写入套接字,则必须使用相同的对象(我在上面的示例中称为 CriticalSection 的对象)。

关于multithreading - Delphi:如何锁定 "Socket.Write"并解锁?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8439608/

10-13 09:27