我有几个客户端,他们写入一个套接字(不是端口),当他们一起写入时,我收到垃圾,所有客户端的所有数据都被合并。
所有客户端都在 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
放在 Enter
和 Leave
之间:
CriticalSection.Enter;
try
ASocket.Connection.Socket.Write(buf);
finally
CriticalSection.Leave;
end;
Acquire
和 Release
方法执行相同的操作 ( doc )。重要提示:如果您在代码的多个点写入套接字,则必须使用相同的对象(我在上面的示例中称为 CriticalSection
的对象)。关于multithreading - Delphi:如何锁定 "Socket.Write"并解锁?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8439608/