我有一个类层次结构:
class BaseProcess { public virtual void Execute() = 0; }; class SubProcess : BaseProcess { public virtual void Execute() { //Do Something //Need to call back to the GUI here, maybe to get a file path from a file selector //Do Something Else //Now want to update the GUI with the progress of the operation perhaps //More processing } };
假设从 GUI 按钮事件处理程序创建并调用了一个 SubProcess 对象...
我的问题是在 Execute() 函数中与 GUI 交互的最佳方式是什么? (还假设 Execute() 可能在不同的线程上运行)
我的想法是将回调传递给 SubProcess 对象,因为这将允许我将信息发送到 GUI,但是在文件选择器的情况下,将数据返回到的最佳方法是什么子进程对象?我希望解决方案尽可能通用,以便我可以根据请求返回不同类型的数据。
注意:请忽略任何代码错误,我快速将示例拼凑在一起只是为了说明问题
更新:
很抱歉,这将在 Windows、MFC 上进行。我不确定这有多重要,因为我认为整体设计应该适用于大多数 GUI 框架?
最佳答案
class SubProcess : BaseProcess
{
public virtual void Execute()
{
//Do Something
char file_name[MAX_PATH +1];
myWindow->SendMessage(WM_GETFILE, max_path, (LPARAM)file_name);
//Do Something Else
myWindow->SendMessage(WM_UPDATE, 50);
//More processing
}
};
在窗口类中:
#define WM_GETFILE (WM_USER+1)
#define WM_UPDATE (WM_USER+2)
BEGIN_MESSAGE_MAP(CMyWindow, CWnd)
ON_MESSAGE(WM_GETFILE, MyGetFileHandler)
ON_MESSAGE(WM_UPDATE, MyUpdateHandler)
END_MESSAGE_MAP()
LRESULT CMyWindow::MyGetFileHandler(WPARAM wParam, LPARAM lParam)
{
}
LRESULT CMyWindow::MyUpdateHandler(WPARAM wParam, LPARAM lParam)
{
}
关于c++ - 在长时间处理期间与 GUI 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13178379/