firemonkey indy udp синхронизировать поток

Добрый день. Я создаю экземпляр класса Thread. В этой теме я создаю udpserver. UDPREAD синхронизируется с основным потоком.

Вопрос: Как синхронизироваться не с основным потоком, а с потоком, который является родителем UDP

благодарю вас


person rustam    schedule 20.02.2019    source источник


Ответы (1)


TIdUDPServer — это многопоточный компонент. Внутри он запускает отдельный поток чтения для каждого элемента, который вы устанавливаете в коллекции TIdUDPServer.Bindings. Когда данный Binding получает входящие данные, соответствующий поток считывает данные, а затем запускает событие OnUDPRead.

По умолчанию обработчик события OnUDPRead вызывается в контексте основного потока пользовательского интерфейса через вызов TThread.Synchronize(). Если вы хотите избежать этого, вам нужно установить для свойства TIdUDPServer.ThreadedEvent значение true. Затем обработчик событий будет вызываться в контексте потока чтения Binding напрямую, и вы можете синхронизировать код обработчика событий с родительским потоком вашего сервера, как хотите.

person Remy Lebeau    schedule 20.02.2019
comment
значит можно синхронизировать не только с основным потоком, но и с потоком по родительскому UDP, TThread.Synchronize(nil, MyThreadProcedure) - person rustam; 20.02.2019
comment
Это означает, что вы можете синхронизировать (части) свой код обработчика событий, как хотите. - person Remy Lebeau; 20.02.2019