【发布时间】:2012-11-01 13:45:14
【问题描述】:
我有一个类层次结构:
类 BaseProcess { 公共虚拟无效执行()= 0; }; 类子进程:BaseProcess { 公共虚拟无效执行() { //做点什么 //这里需要回调GUI,可能是从文件选择器中获取文件路径 //做其他事情 //现在想用操作的进度更新GUI //更多处理 } };假设从 GUI 按钮事件处理程序创建和调用 SubProcess 对象...
我的问题是从 Execute() 函数中与 GUI 交互的最佳方式是什么? (同时假设 Execute() 可能在不同的线程上运行)
我的想法是将回调传递给 SubProcess 对象,因为这将允许我向 GUI 发送信息,但是对于文件选择器,将数据返回到的最佳方法是什么子进程对象?我希望解决方案尽可能通用,以便我可以根据请求返回不同类型的数据。
注意:请忽略任何代码错误,我快速将示例拼凑在一起只是为了说明问题
更新:
很抱歉,这将在 Windows、MFC 上。我不确定这有多重要,因为我认为整体设计应该适用于大多数 GUI 框架?
【问题讨论】:
-
线程。获取一个线程来完成真正的工作,并告诉它在完成后将结果发布回 GUI。
-
如果这是 Windows,您将使用 SendMessage()。
-
没关系,但如果我想在执行过程中发布进度怎么办?另外,如果我需要来自 GUI 的输入而不仅仅是输出到 GUI,该怎么办?
-
你可以使用 SendMessage 来做这两件事。您将创建自定义消息(WM_USER+1 等)并将它们发送到您的窗口。您也可以传递一个 char 数组,并让窗口填充它。
标签: c++ user-interface mfc