Windows
多线程与对话框
程
化
Windows的对话框是获取信息输入的主要手段,增加线程则是获得更好UI响应的重要方式。由于Windows在处理对话框时进行线程调度的特殊性,如果不对此加以特别注意,增加线程可能不能带来UI响应的改善。
1 跨线程创建对话框
1.1 需求
有这样的应用场景:创建非模态对话框后需要马上做些耗时的工作,而同时又希望能够立刻在对话框上操作,所以,希望让非模态对话框工作在单独的线程上。
1.2 方案
主线程启动一个UI线程,并且,让这个线程创建非模态对话框。
想法是:既然用单独的线程创建了对话框,所以,主线程在创建UI线程后,就可以继续自己其他耗时的工作了。
1.3 实现
用一个简单的例子程序来试验这个方案:在VC++中创建一个基于SDI的MFC应用程序,在其CView派生类中处理“Call”菜单命令,创建派生自CWinThread的UI线程,在这个UI线程初始化过程中创建一个对话框。
1.3.1 单独的UI线程创建对话框
实现一个派生自CWinThread的UI线程类,其中最关键的是CreateMyDlg和DestroyMyDlg函数。
类如下
class UIWorker : public CWinThread
{
DECLARE_DYNCREATE(UIWorker)
protected:
UIWorker(); // protected constructor used by dynamic creation
// Attributes
public: