Delphi: Как заблокировать «Socket.Write» и разблокировать? - PullRequest
3 голосов
/ 09 декабря 2011

У меня есть несколько клиентов, которые пишут в один сокет (не порт), когда они пишут вместе, я получаю мусор, все данные от всех клиентов объединяются.

все клиенты находятся в одной программе в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 Ответ

2 голосов
/ 09 декабря 2011

Вы можете использовать TCriticalSection (SyncObjs единицу): поместите Write между Enter и Leave:

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

Методы Acquire и Release делаютто же самое ( документ ).Важно: если вы пишете в сокет в нескольких точках своего кода, вы должны использовать один и тот же объект (тот, который я назвал CriticalSection в приведенном выше примере).

...