gpt4 book ai didi

c++ - 为多线程场景重构单线程GUI代码

转载 作者:太空狗 更新时间:2023-10-29 21:05:02 34 4
gpt4 key购买 nike

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

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

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

但是,GUI 不能在工作线程中工作,并且依赖注入(inject)几乎是不可能的,因为它会深入几层计算代码。从类接口(interface)的角度来看,这是一种非常不干净的方式,比如 someclass instance(data_in, data_out, param1, param2, GUI_class_ref) : m_GUI(GUI_class_ref), ... 3 层或更多层。

如果代码在多个线程中拆分,是否有适用于此类场景的模式/ list 可用于将 GUI 提示编码回主线程并将结果返回到计算代码的核心?

最佳答案

您可以创建同步上下文。它是一个由主线程执行的命令队列。工作线程将命令添加到此队列(必须为单线程访问锁定)并等待。主线程定期处理此队列,执行命令(例如,“取消操作”对话框)并通知工作线程有关结果。
在 C# 中,这是通过委托(delegate)和调用它们的参数完成的。在 C++ 中,您可以使用枚举编码的消息在开关中处理(就像 Windows 程序中的消息一样。)或者创建一些带有指向成员函数的指针 + 对象指针来调用它们 + 参数来调用。

关于c++ - 为多线程场景重构单线程GUI代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10907946/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com