看板 C_and_CPP 關於我們 聯絡資訊
因為 CreateThread API 你自己要做很多的保護和資源 allocation CRT 中的 _beginthread 會幫你處理 例如 CreateThread() 得到的 Handle 你什麼時候做 CloseHandle()? 你是先 suspend thread 後面再啟動? 還是一呼叫 CreateThread 就開始執行 VC 透過 _beginthread() _endthread() 幫你做很多這類的保護 最終他還是呼叫 CreateThread API 早期處理 thread, 都是直接呼叫 WINAPI 但是常碰到有些使用者對於 thread 呼叫 碰到很多不確定什麼時候該清除資源的問題 因此才提供 CRT 當然你一用 CRT 希望有關 thread 就全部都用 CRT 處理 不要用 CRT 拿到 handle 後面再拿去 winapi 呼叫 ex: hThread =_beginthread() CloseThread(hThread) 在 VC11 中支援 c++11 對於 thread 會有另外一套子集來支援 thread & parallel 可以參考 VC\crt\src\thread.c 有 _beginthread() 怎麼處理 thread 的流程 ※ 引述《licheer (HOPE)》之銘言: : VC++中, 盡可能使用 CRT 的 _beginthreadex : 少用 WIn32 API CreateThread : 原因是 CreateThread 有機會造成記憶體洩漏, 或是不能保證 thread-safe : _beginthreadex 其實也是呼叫 CreateThread : 並多增加一些操作來避免上述問題發生 : 看到這裡, 有點混淆了 CRT 和 Win32 API 的關係 : CRT 應該是比較底層, 上層是 Win32 API : 但 _beginthreadex 的說明, 又好像 Win32 API 再底層 : 兩者間是怎樣的關係呢? : 請各位大大解惑,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.44.247.131 ※ 編輯: chengcti 來自: 114.44.247.131 (12/07 10:35)