首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重构多线程scenarious的单线程GUI代码

重构多线程scenarious的单线程GUI代码
EN

Stack Overflow用户
提问于 2012-06-06 11:49:46
回答 2查看 262关注 0票数 3

通常情况下,有一个MFC/Win32/WTL/wxWidgets/Qt应用程序可以做一些有用的事情。它被设计成单线程的,并且在处理块中有一些处理错误/问题的逻辑。

因此,在某个类的内部,可能会触发一个对话框,询问用户“您确定要完成操作吗?”/“文档布局错误”或类似的问题。

问题是该对话框是从计算量很大的/正向代码触发的。像FFT/图像锐化/文件系统碎片整理功能,或者其他类似的功能。如果没有GUI,它可以很容易地在工作线程中启动。而且会更适合那里,因为它可以避免让用户感到厌烦的GUI停顿。

然而,GUI不能在工作线程中工作,而且依赖项注入几乎不可能做到,因为它将向下经过几层计算代码。从类接口的角度来看,这是一种非常不干净的方式,比如someclass instance(data_in, data_out, param1, param2, GUI_class_ref) : m_GUI(GUI_class_ref), ... 3或更深的层次。

如果代码被分成多个线程,是否有一个模式/检查列表可用于将GUI提示编组回主线程,并将结果返回到计算代码的核心?

EN

Stack Overflow用户

发布于 2012-06-07 17:25:09

你正处在一个传统的旧代码重构的十字路口。适当的隔离和依赖注入是不可行的,因此您只能使GUI上下文全局可访问。这就是创建一个单例。它不一定要直接作为GUI上下文,因此至少实现了一定程度的隔离。它可以是某种类型的管理器,它具有GUI上下文,并且只接受来自计算代码的特定目的调用。您可以使GUI线程类成为该管理器的朋友,并使GUI回调(在关闭对话框时)成为私有的。

我可以给出更具体的想法来写什么,因为我经历了完全相同的挑战(现有重型应用程序的三化)。但是我搞不懂你是想让GUI线程自由运行,还是想让后台计算也能自由运行。您给出的示例对话框提示符是令人困惑的,因为它建议了一个决定,需要回答该决定才能知道是否继续(这意味着计算被搁置)。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10907946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档