4.執行緒內部細節
1.createthread 和 _beginthreadex 區別:
createthread是系統api,_beginthreadex是crt(c run time library 執行時庫)函式. _beginthreadex內部會呼叫createthread函式。
_endthreadex會釋放_beginthreadex為tiddata結構分配的記憶體。
如果執行緒函式中呼叫了crt函式(注:不是全部crt函式 只是其中一部分函式),則該執行緒函式必須由_beginthreadex而不是createthread函式建立。否則會產生記憶體洩露。
如果在除主線程之外的任何執行緒中進行一下操作,你就應該使用多執行緒版本的c runtime library,並使用_beginthreadex和_endthreadex:
(1) 使用malloc()和free(),或是new和delete
(2) 使用stdio.h或io.h裡面宣告的任何函式
(3) 使用浮點變數或浮點運算函式
(4) 呼叫任何乙個使用了靜態緩衝區的runtime函式,比如:asctime(),strtok()或rand()
2._beginthreadex和_beginthread區別
_beginthreadex內部會自動呼叫 _endthreadex.
_beginthread內部會自動呼叫_endthread.
_endthread內部會自動呼叫closehandle關閉當前thread核心物件的控制代碼,所以在用_beginthread 時我們不需要在主線程中呼叫closehandle來關閉子執行緒的控制代碼。
_endthreadex相比_endthread而言更安全。它不會自動關閉當前thread核心物件的控制代碼。所以在用_beginthreadex時我們需要用closehandle來關閉子執行緒的控制代碼。
msdn中的例子
c/c++ code
//crt_begthrdex.cpp
//compile with: /mt
#include
<
windows.h
>
#include
<
stdio.h
>
#include
<
process.h
>
unsigned counter;
unsigned __stdcall secondthreadfunc(
void
*parguments )
intmain()
mysql vc執行庫 VC 執行庫安裝
vc 執行庫 visual c 可再發行程式包 是執行使用相應版本的 visual c 開發的應用程式時必要的元件。wampserver內建的apache mysql mariadb和php就依賴vc 執行庫,所以我們需要在電腦上安裝好vc 執行庫,否則無法正常使用wampserver。wampse...
多執行緒執行庫的問題
libcmt.lib crt0dat.obj error lnk2005 exit already defined in msvcrt.lib msvcrt.dll libcmt.lib crt0dat.obj error lnk2005 exit already defined in msvcrt...
VC執行庫 ( MT MD 等)
由於老是混淆這些概念,特轉此微博。vc專案屬性 配置屬性 c c 生成 執行時庫 可以採用的方式有 多執行緒 mt 多執行緒除錯 mtd 多執行緒dll md 多執行緒除錯dll mdd 單執行緒 ml 單執行緒除錯 mld reusable library switch library macro...