2011-10-19 103 views
1

我有我想要合併多線程的MFC應用程序。最初我正在考慮使用Boost.Thread,因爲一般的開發易於進行。但是,我想知道是否有任何問題,如果我應該使用AfxBeginThread在MFC上下文中安全嗎?MFC多線程:AfxBeginThread與Boost.Thread?

+1

哦,當然,你MI ght很容易最終需要一個CWinThread,並且只有一個boost :: thread。 –

回答

1

我發現這篇Microsoft文章:Multithreading: Programming Tips。它說:

訪問非MFC線程

MFC對象如果你有在 比使用CWinThread對象以外的方式創建一個線程多線程應用程序,你不能訪問其他MFC 對象那個線程。換句話說,如果要從輔助線程訪問任何 MFC對象,則必須使用多線程創建 用戶界面線程或多線程:創建工作線程中描述的方法之一來創建該線程。 這些方法是唯一允許類庫 初始化處理多線程 應用程序所需的內部變量的方法。

我打算在模型視圖演示者上下文中使用線程,以便多線程執行一些長時間運行的演示者任務。由於演示者需要與視圖進行通信,我認爲這最有可能被視爲訪問MFC對象(至少間接)。基於此,我決定現在就開始使用AfxBeginThread線程創建方法。

1

嘗試閱讀本文章節Concurrent Programming Improvements這是在Windows平臺上執行此操作的最佳方式。 Boost會減慢你的構建幷包含很多你不需要的額外東西。

另請參閱並行編程的MSDN網站了解更多詳情。

1

使用boost::thread的一個好處是其界面類似於std::thread's。但是,有一些差異。如果你最終想要使用std::threadboost::thread將是一個簡單的過渡。

0

如果你有MFC項目,請不要引入boost。儘可能使用MFC API。既然它有一些線程支持的東西,你真的不需要一個額外的庫(尤其是提升)。

0

就包括下面的頭文件,應該沒有問題:

#include <boost/thread/win32/mfc_thread_init.hpp> 
#include <boost/thread.hpp>