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