我有一个类的继承关系:

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/

10-16 15:53