sta*_*005 1 delphi user-interface multithreading sendmessage blocking
我的Windows应用程序有一个标签界面.每个选项卡都会呈现一些UI内容.众所周知,如果我在主线程中进行非常耗时的for循环而不让其他人处理任何Windows消息,那么应用程序将被冻结.在冻结期间,我无法切换标签.
我受到了谷歌Chrome的多进程架构的启发.我尝试使用SetParent
到嵌入过程到另一个过程.更具体一点:流程A是主人.它可以创建无限的工作流程.每个工作进程都有自己的消息循环.如果进程B被冻结,则不应冻结进程A和任何其他工作进程.
其实我错了:如果我点击按钮工作进程B在主线程中不间断地执行大量UI工作,不仅会阻止进程B的UI,还会阻止进程A的UI,直到我的测试代码结束.
有人可以分享一些灯吗?
你试图做的是,呃,很难做到正确.我建议您首先阅读Raymond Chen的文章:调用具有跨进程父/子或所有者/拥有窗口关系是否合法
创建跨线程父/子或所有者/拥有窗口关系隐式附加这些窗口所属的线程的输入队列,并且此附件是可传递的:如果其中一个队列连接到第三个队列,则所有三个队列相互依附.更一般地,由父/子链或所有者/拥有或共享线程关系相关的所有窗口的队列彼此连接.
这正是您描述的场景.并且可以预期所有消息队列的融合.您有多个进程的事实并没有改变您不能阻止UI线程的事实.
所以我认为你的程序设计存在缺陷.你正在增加一个史诗般的复杂性,没有奖励.多进程架构的好处是安全性和隔离性.关于阻止UI线程,您不会更改任何内容.解决问题的唯一方法是将长时间运行的任务放在非UI线程上.我的强烈建议是回归单一的流程设计.
归档时间: |
|
查看次数: |
940 次 |
最近记录: |