[英]Udp Server on ActiveX Form
当我使用TIdUDPServer上ActiveXForm,UDP服务器的OnUDPRead事件不会触发。
如果我检查IdUDPServer.Active状态,则为“ true”。 但是为什么OnUDPRead从未触发?
TIdUDPServer
是一个多线程组件。 Bindings
集合中的每个项目都在其自己的工作线程中侦听数据。
TIdUDPServer.ThreadedEvent
属性默认情况下为false,这意味着每个Binding
通过调用TThread.Synchronize()
在主UI线程的上下文中触发OnUDPRead
事件,除非在DLL和EXE都使用DLL编译时,此操作在DLL内部不起作用启用了运行时程序包,以便它们共享RTL的通用副本。 否则,DLL将具有其自己的RTL副本,而不是主EXE的RTL(假设EXE完全使用了VCL)。 如果不启用运行时程序包,则主EXE必须定期显式调用DLL以为Synchronize()
请求泵送DLL的消息队列,因为它们不会出现在EXE的消息队列中(假设EXE甚至知道如何处理它们)。如果有)。
如果将ThreadedEvent
设置为true,将不使用Synchronize()
,因此将在每个Binding
线程的上下文中触发OnUDPRead
事件。 您只需要确保将OnUDPRead
处理程序代码编写为线程安全的即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.