繁体   English   中英

ActiveX表单上的Udp服务器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM