UI 线程是由CWinThread派生类控制的,这个派生类和CWinApp极为类似,实际上CWinApp也是一个UI线程,他是应用程序的主线程,一般我们所说的UI线程,是指除主线程之外的界面线程。
具体创建方法:
1.创建一个CWinThread的派生类CUiTread2
2.在CUiTread2类的InitInstance函数中建立自己的界面,注意必须设置CWinThread类的m_pMainWnd成员,否则这 个线程不会随着界面的关闭而退出。
- BOOL CMyThread::InitInstance()
- {
- // TODO: perform and per-thread initialization here
- CMyDlg *pDlg=new CMyDlg;
- pDlg->Create(IDD_GUIDLG);
- pDlg->ShowWindow(SW_SHOW);
- m_pMainWnd = pDlg;
- return TRUE;
- }
3.启动该线程:
- CWinThread *pTread=AfxBeginThread(RUNTIME_CLASS(CUiTread2));
关于线程的退出:
当关闭窗口的时候,CWnd::OnNcDestroy会自动给线程发送WM_QUIT消息,这个时候线程会退出。
UI线程传参数标准方法
1. 给你那个线程类添加成员变量用来带参数
2. 创建线程按照下述方式进行
- C/C++ code
- CMyThread* pThread= (CMyThread*)AfxBeginThread(
- RUNTIME_CLASS(CMyThread),//对应得线程类
- THREAD_PRIORITY_NORMAL,//normal优先级
- 0,// 缺省堆栈大小
- CREATE_SUSPENDED,//创建以后先暂停,这点狠重要,让你在线程启动之前设置参数
- NULL
- );
- pThread->iVal=1;
- pThread->szVal="this is data";
- pThread->ResumeThread();