簡體   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