MFC中创建子线程
_beginthreadex创建子线程
纯 C 运行库函数,不依赖 MFC 类,跨平台也能用,写法最简单,适合大多数简单任务。
1 | // 线程函数(必须是全局函数 / 静态成员函数) |
优点
- 写法最简单,轻量
- 不依赖 MFC 框架,通用
缺点
- 线程函数不能是普通成员函数(必须全局 / 静态)
- 没有 MFC 封装,需要自己管理句柄、同步
AfxBeginThread创建子线程 MFC 专用
MFC 官方封装的线程函数,专门给 MFC 程序用,最常用、最省心。
MFC 把线程分成两种:
- 工作线程(后台计算、耗时任务,无界面)
- UI 线程(带消息循环,可创建窗口)
1 | // 线程函数(全局 / 静态成员函数) |
UI 线程(极少用,需要窗口才用)
继承 CWinThread 实现,自带消息循环。
优点
- MFC 原生,一行创建
- 自动管理线程生命周期
- 支持工作线程 + UI 线程
缺点
- 线程函数依然必须是全局 / 静态函数
- 子线程不能直接操作 UI 控件(会崩溃)
std::thread
VS2013 及以上,强烈推荐,语法最优雅,支持直接传普通成员函数。
1 | // 类成员函数作为线程函数 |
优点
- C++ 标准,跨平台
- 可以直接用类成员函数,不用全局 / 静态
- 语法简洁、现代
缺点
- 需要 VS2013+ 支持 C++11
- 依然不能在子线程直接操作 MFC UI