MFC 线程创建方式
2016-08-26 12:54
253 查看
MFC 分UI线程和工作线程,一般现在的应用程序都是一个主UI线程和N个工作线程来完成工作。主UI线程获取到工作线程发送的信息来刷新界面。
不过因为工作需要,MFC有要维护的项目,因此就学习一下MFC创建UI线程,使用工作线程的方式。
1、UI线程,继承CWinThread类
线程InitInstance
BOOST线程创建的方式种类比较多,可以通过函数对象,Boost::bind成员函数等多种方式创建,由于工作没太多时间,就不总结了。
一般MFC使用AfxBeginThread比较安全。
by karllen
2016-08-26 中午 于 杭州 滨江
不过因为工作需要,MFC有要维护的项目,因此就学习一下MFC创建UI线程,使用工作线程的方式。
1、UI线程,继承CWinThread类
class CAddDeviceApp : public CWinThread { DECLARE_DYNCREATE(CAddDeviceApp) protected: CAddDeviceApp(); public: virtual BOOL InitInstance(); virtual int ExitInstance(); protected: virtual ~CAddDeviceApp(); DECLARE_MESSAGE_MAP() };
线程InitInstance
BOOL CAddDeviceApp::InitInstance() { CSecondThreadDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { } else if (nResponse == IDCANCEL) { } return TRUE; }
m_pMainWnd = &dlg; 加上这个之后,UI线程会独立处理消息循环,启动的UI线程DoModal对话框不会阻塞主线程的对话框。 启动UI线程:
CAddDeviceApp * pThread = (CAddDeviceApp*)AfxBeginThread(RUNTIME_CLASS(CAddDeviceApp));
2、工作线程 [b]目前工作在MFC中使用的工作线程有:MFC线程,C Run运行时线程,Boost线程。 [/b]
boost::thread thrd(BoostThreadFunc); _beginthread(CRunThreadFunc,0,NULL); //不用 _beginthreadex(NULL, 0, ThreadFunEx, NULL, 0, NULL); pThread=AfxBeginThread(ThreadFunc,NULL,THREAD_PRIORITY_NORMAL);
BOOST线程创建的方式种类比较多,可以通过函数对象,Boost::bind成员函数等多种方式创建,由于工作没太多时间,就不总结了。
一般MFC使用AfxBeginThread比较安全。
by karllen
2016-08-26 中午 于 杭州 滨江
相关文章推荐
- 多线程专题之MFC创建线程(1)
- boost::thread线程创建方式总结
- MFC 创建快捷方式(学习笔记)
- MFC创建线程的问题
- day10 反射创建数组 线程的基本概念 线程的编写和启动方式 线程的运行状态以及状态转换方法 线程的调度和优先级设置
- 创建用户接口线程 MFC
- Java 线程的创建方式
- boost::thread线程创建方式总结
- 解决MFC下线程创建的一个编译错误
- 多线程专题之MFC创建线程(1)
- boost::thread线程创建方式总结
- 如何用MFC创建快捷方式
- 如何用MFC创建快捷方式
- 创建线程两种方式的比较
- MFC创建线程,线程间通信
- 多线程专题之MFC创建线程(2)
- MFC中如何安全的创建和关闭线程
- 创建线程两种方式的比较
- MFC下线程的创建
- 多线程专题之MFC创建线程(2)