Delphi:如何锁定“Socket.Write”并解锁?
我有几个客户端,它们写入一个套接字(而不是端口),当它们一起写入时,我收到垃圾,来自所有客户端的所有数据都被合并。
所有客户端都在线程中的同一个程序中。
我需要锁定 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
I have several clients, who writes to one socket (not port), when they write together, I receive the garbage, all data from all clients are merged.
all clients are in the same program in Threads.
I need to lock write()
ASocket.Connection.Socket.LOCK; // need to be thread safe
ASocket.Connection.Socket.Write(buf);
ASocket.Connection.Socket.UNLOCK; // need to be thread safe
How can I do it ?
Thanks.
Delphi 2010, Indy 10, Win7
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用
TCriticalSection
(SyncObjs
单元):将Write
放在Enter
和Leave
之间>:方法
Acquire
和Release
执行相同的操作(doc)。重要提示:如果您在代码的多个点写入套接字,则必须使用同一个对象(我在上例中称为CriticalSection
的对象)。You can use
TCriticalSection
(SyncObjs
unit): put theWrite
betweenEnter
andLeave
:The methods
Acquire
andRelease
do the same (doc). Important: if you write to the socket at multiple points of your code, you must use the same object (the one I calledCriticalSection
in the above example).