我有一个类的继承关系:
BaseProcess类
{
公共虚拟无效Execute()= 0;
};
SubProcess类:BaseProcess
{
公共虚拟无效Execute()
{
//做点什么
//需要在此处回调GUI,也许是从文件选择器获取文件路径
//做其他事情
//现在可能要用操作进度来更新GUI
//更多处理
}
};
假设从GUI按钮事件处理程序创建并调用了SubProcess对象...
我的问题是从Execute()函数中与GUI交互的最佳方法是什么? (还假设Execute()可能在其他线程上运行)
我的想法是将回调传递给SubProcess对象,因为这将使我能够将信息发送到GUI,但是对于文件选择器,将数据返回到SubProcess对象的最佳方法是什么? ?我希望该解决方案尽可能通用,以便根据请求返回不同类型的数据。
注意:请忽略任何代码错误,我将示例快速汇总在一起只是为了说明问题
更新:
很抱歉,这是在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
}
};
并在window类中:
#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/