關於線程的一些問題


MD和MT官方解析

/MT 
 使應用程序使用運行時庫的多線程靜態版本。定義_MT 並使編譯器將庫名 LIBCMT.lib 放入 .obj 文件中,以便鏈接器使用 LIBCMT.lib解析外部符號。

/MD 
使應用程序使用運行時庫的多線程並特定於DLL 的版本。定義 _MT 和 _DLL,並使編譯器將庫名 MSVCRT.lib 放入 .obj文件中。
用此選項編譯的應用程序靜態鏈接到MSVCRT.lib。該庫提供允許鏈接器解析外部引用的代碼層。實際工作代碼包含在 MSVCR90.DLL, 中,該庫必須在運行時對於與MSVCRT.lib 鏈接的應用程序可用。
當/MD 與 _STATIC_CPPLIB 預處理器定義 (/D_STATIC_CPPLIB)一起使用時,您的應用程序將與靜態多線程標準 C++ 庫 (libcpmt.lib) 而非動態版本 (msvcprt.lib)鏈接,但仍通過 msvcrt.lib 動態鏈接到主 CRT。
請注意,不支持_STATIC_CPPLIB 預處理器定義和 /clr 或 /clr:pure 編譯器選項的組合。有關 /clr選項的限制的更多信息,請參見 /clr 限制。


產生一個線程的時候儘量使用_beginthreadex替代createthread和_beginthread函數

相對於createthread,_beginthreadex封裝了createthread函數,負責線程額外簿記工作,runtime library通過簿記來爲線程分配新的內存

而_beginthread返回的handle很可能是不可用的,因爲其第一時間是關閉handle。所以在不能檢測其產生的線程狀態,該函數參數有限,不然不能產生後直接掛起,以便調整優先權

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章