我有我想要合併多線程的MFC應用程序。最初我正在考慮使用Boost.Thread,因爲一般的開發易於進行。但是,我想知道是否有任何問題,如果我應該使用AfxBeginThread在MFC上下文中安全嗎?MFC多線程:AfxBeginThread與Boost.Thread?
回答
我發現這篇Microsoft文章:Multithreading: Programming Tips。它說:
訪問非MFC線程
MFC對象如果你有在 比使用CWinThread對象以外的方式創建一個線程多線程應用程序,你不能訪問其他MFC 對象那個線程。換句話說,如果要從輔助線程訪問任何 MFC對象,則必須使用多線程創建 用戶界面線程或多線程:創建工作線程中描述的方法之一來創建該線程。 這些方法是唯一允許類庫 初始化處理多線程 應用程序所需的內部變量的方法。
我打算在模型視圖演示者上下文中使用線程,以便多線程執行一些長時間運行的演示者任務。由於演示者需要與視圖進行通信,我認爲這最有可能被視爲訪問MFC對象(至少間接)。基於此,我決定現在就開始使用AfxBeginThread線程創建方法。
嘗試閱讀本文章節Concurrent Programming Improvements這是在Windows平臺上執行此操作的最佳方式。 Boost會減慢你的構建幷包含很多你不需要的額外東西。
另請參閱並行編程的MSDN網站了解更多詳情。
使用boost::thread
的一個好處是其界面類似於std::thread
's。但是,有一些差異。如果你最終想要使用std::thread
,boost::thread
將是一個簡單的過渡。
如果你有MFC項目,請不要引入boost。儘可能使用MFC API。既然它有一些線程支持的東西,你真的不需要一個額外的庫(尤其是提升)。
在我寫這篇文章的時候,它仍然是不安全的,因爲這個問題在Boost.Thread:
http://boost.2283326.n4.nabble.com/Fwd-Thread-Solution-to-conflict-with-MFC-td3477977.html
(短版,任何人都嘗試這種發現很快就好了:僅僅用Boost.Thread鏈接導致斷言在MFC初始化)
就包括下面的頭文件,應該沒有問題:
#include <boost/thread/win32/mfc_thread_init.hpp>
#include <boost/thread.hpp>
- 1. 在MFC線程中使用boost :: mutex(AfxBeginThread)?
- 2. 使用MFC和AfxBeginThread線程調度問題
- 3. 多線程和MFC
- 4. MFC多線程與刪除[],dbgheap.c
- 5. 多線程(再入)MFC DLL
- 6. 從線程MFC
- 7. 多線程結構使用mfc
- 8. 2008 MFC和線程?
- 9. 停止MFC線程
- 10. Boost.Thread鏈接 - boost_thread與boost_thread-mt
- 11. 與多線程
- 12. 與多線程
- 13. 使用Boost.Log(或Boost.Thread)時dllinit.cpp行703中的MFC ASSERT
- 14. 多線程PHP與多線程Python
- 15. 多線程與單線程與Asp.net 3.5
- 16. MFC中的工作線程
- 17. MFC DLL的GUI線程?
- 18. MFC C++背景線程
- 19. 幫助在MFC線程UI
- 20. 如何殺死MFC線程?
- 21. 如何使用boost.thread同時運行由循環創建的多個線程?
- 22. 多線程與R?
- 23. 多線程與MQ
- 24. 多線程與NSThread
- 25. 多線程與urlib2
- 26. 多線程與TCPclient
- 27. EventAggregator與多線程
- 28. NOLOCK與多線程
- 29. unique_ptr與多線程
- 30. 多線程與QString
哦,當然,你MI ght很容易最終需要一個CWinThread,並且只有一個boost :: thread。 –