Как я могу предотвратить одновременное изменение списка из событий таймера и сокета? - PullRequest
2 голосов
/ 24 февраля 2012

Я разрабатываю приложение, в котором я должен обрабатывать некоторые списки (вставка, удаление).Проблема заключается в том, что список может подвергаться изменениям компонента TTimer и TServerSocket.

Как можно защитить списки от одновременного изменения TTimer и TServerSocket?Должен ли я использовать темы?

Ответы [ 2 ]

6 голосов
/ 24 февраля 2012

События таймера выполняются в главном потоке приложения.Я не уверен насчет событий TServerSocket (возможно, это вариант конфигурации).

В общем случае: если оба доступа выполняются в главном потоке, критический раздел вам не нужен, поскольку другое событие может сработать только при первомсобытие уже завершено (если только вы не вызываете Application.ProcessMessages, который вы не должны делать в любом случае).Критическая секция не будет работать в этом сценарии, так как она будет синхронизировать только отдельные потоки.

Если они работают в разных потоках, вам нужна какая-то синхронизация.Один из вариантов - критический раздел, другие включают мьютексы, спин-блокировки и т. Д.

1 голос
/ 24 февраля 2012

Попробуйте использовать это или его вариант: http://www.swissdelphicenter.ch/en/showcode.php?id=2167

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...