MFC多线程:AfxBeginThread vs Boost.Thread?

时间:2011-10-19 18:26:05

标签: c++ multithreading mfc boost-thread

我有一个MFC应用程序,我想要包含多线程。最初我正在考虑使用Boost.Thread,因为通常可以通过boost进行开发。但是,我想知道是否有任何陷阱,以及我是否应该使用AfxBeginThread在MFC上下文中安全?

6 个答案:

答案 0 :(得分:1)

尝试阅读本文,在Concurrent Programming Improvements部分中,这是Windows平台上最好的方法。 Boost会减慢你的构建速度并包含许多你不需要的额外内容。

另请查看有关并行编程的MSDN站点以获取更多详细信息。

答案 1 :(得分:1)

使用boost::thread的一个好处是它的界面类似于std::thread。但是,有一些差异。如果您最终想要使用std::threadboost::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初始化中的断言)