CreateThread執行緒傳遞結構體引數
阿新 • • 發佈:2018-12-10
宣告一個結構體:
struct Info
{
CString strInfo;
int nCopunt;
};
在CPP檔案在建立一個執行緒:
Info info;
info.nCopunt = 100;
CString str;
str = "Hello";
info.strInfo = str;
HANDLE hThread = CreateThread(NULL, 0, ThreadProc,&info,0,0);
執行緒函式:
DWORD WINAPI ThreadProc(PVOID pParam) { Info* pInfo = (Info*)pParam; return 0; }
按照上面的寫法,會發現線上程函式當中 pInfo獲取的資訊是亂碼; 原因: **建立執行緒之後已經過了info這個變數的作用域,線上程函式獲取的時候,Info變數已經不存在了; 為了保證執行緒訪問資料爭取,必須保證了info的空間在堆上,pInfo指向的資料也放堆上,保證執行緒訪問的時候資料有效;**
改進方法:
1:Info info;放到成員變數(這一種個人感覺 如果併發量大,可能info成員變數的值線上程訪問時已經被覆蓋,不過計算機的效能應該可以處理過來;) 2:Info* info = new Info;變數要在堆上;
一種是指向成員變數(保證在傳遞完以前不銷燬),另外就是傳遞的結構體自己有這個記憶體儲存空間