我有一个MFC应用程序,我想要包含多线程。最初我正在考虑使用Boost.Thread,因为通常可以通过boost进行开发。但是,我想知道是否有任何陷阱,以及我是否应该使用AfxBeginThread在MFC上下文中安全?
答案 0 :(得分:1)
尝试阅读本文,在Concurrent Programming Improvements部分中,这是Windows平台上最好的方法。 Boost会减慢你的构建速度并包含许多你不需要的额外内容。
另请查看有关并行编程的MSDN站点以获取更多详细信息。
答案 1 :(得分:1)
使用boost::thread
的一个好处是它的界面类似于std::thread
。但是,有一些差异。如果您最终想要使用std::thread
,boost::thread
将是一个简单的过渡。
答案 2 :(得分:1)
我发现了这篇微软文章:Multithreading: Programming Tips。它说:
从非MFC线程访问MFC对象
如果您有一个多线程应用程序以某种方式创建一个线程 除了使用CWinThread对象之外,您无法访问其他MFC 来自该线程的对象。换句话说,如果你想访问任何 从辅助线程MFC对象,您必须创建该线程 多线程:创建中描述的方法之一 用户界面线程或多线程:创建工作线程。 这些方法是唯一允许类库的方法 初始化处理多线程所必需的内部变量 应用
我打算在模型视图展示器上下文中使用线程,以便多线程一些长时间运行的演示者任务。由于演示者需要与视图进行通信,我认为很可能有资格访问MFC对象(至少间接地)。基于此我现在决定使用AfxBeginThread线程创建方法。
答案 3 :(得分:1)
只需包含以下头文件,应该没有问题:
#include <boost/thread/win32/mfc_thread_init.hpp>
#include <boost/thread.hpp>
答案 4 :(得分:0)
如果你有MFC项目,请不要介绍它。尽可能使用MFC API。因为它有一些用于线程支持的东西,所以你真的不需要一个额外的库(尤其是boost)。
答案 5 :(得分:0)
在我写这篇文章的时候,由于Boost.Thread中的这个问题,它仍然不安全:
http://boost.2283326.n4.nabble.com/Fwd-Thread-Solution-to-conflict-with-MFC-td3477977.html
(任何人试图发现这个版本的简短版本:仅仅与Boost.Thread链接导致MFC初始化中的断言)