用IdUDPClient组件ReceiveBuffer时,如果又用ShowModal显示另一个窗口,ReceiveBuffer就会死等到窗口退出

emptily 2014-02-25 05:28:27
如题,请问这种问题如何解决?标题描述的只是个例,其实所有的网络组件在ReceiveBuffer时只要是ShowModal显示另一个窗口或者有MessageBox都是会死等了,这个可以用Show显示窗口的办法来解决,可是解决不了MessageBox的问题,本人学艺不精,请高教赐教,非常感谢!
...全文
165 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathletboy 2014-02-26
  • 打赏
  • 举报
回复
引用 4 楼 volte 的回复:
这个为什么要用showmessage呢。这个是showmodal窗体; 用消息机制去处理一些告警等等不是更好?
请仔细看#1帖子,我说的是PostMessage,不是ShowMessage。
pathletboy 2014-02-26
  • 打赏
  • 举报
回复
引用 3 楼 emptily 的回复:
再说了,就算在主窗口的MessageBox同样会阻断ReceiveBuffer,显示MessageBox跟ShowModal是一样的。
你ReceiveBuffer线程和主线程是2个线程,你在ReceiveBuffer里MessageBox或者ShowModal,这俩都是阻塞函数,会阻塞在他们的窗体消息处理函数中,你把消息PostMessage到主线程,你ReceiveBuffer接着运行,要不还有更麻烦的方法,在你的ReceiveBuffer线程里实现窗体消息循环,同时不阻塞ReceiveBuffer也是可以的。
volte 2014-02-26
  • 打赏
  • 举报
回复
这个为什么要用showmessage呢。这个是showmodal窗体; 用消息机制去处理一些告警等等不是更好?
pathletboy 2014-02-26
  • 打赏
  • 举报
回复
同步到主线程,譬如PostMessage到主窗口处理自定义消息,收到消息MessageBox即可。
emptily 2014-02-26
  • 打赏
  • 举报
回复
再说了,就算在主窗口的MessageBox同样会阻断ReceiveBuffer,显示MessageBox跟ShowModal是一样的。
emptily 2014-02-26
  • 打赏
  • 举报
回复
楼上所说的是标准做法吗?这样不是太麻烦了吗?所有MessageBox都在主窗口操作,包括OpenDialog等等一堆窗口全要这样做

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧