建立執行緒的幾種方法
1)createthread(執行緒執行函式必須是全域性的)
使用方法:
//執行緒執行函式宣告
dword winapi threadproc(lpvoid lpparam);
//建立執行緒
createthread(null,0,threadproc, &info[i],0,&dwthreadid[i]);
解釋:
dword 就是 double word, 每個word為2個位元組的長度,dword 雙字即為4個位元組,每個位元組8位,共32位第四個是執行函式的winapi 視窗作業系統應用程式介面(windows api)
lpvoid,是乙個沒有型別的指標,乙個32位指標,指向乙個未指明的型別的值
執行函式即每個執行緒怎麼區分,所要做的事情,左後返回每個執行緒的id,因此是雙位元組的id,這裡是指向視窗的
createthread函式的引數,第乙個是安全屬性的設定及繼承,第二個是堆疊的大小,第三個是執行函式,
引數,第五個是指向dword的指標,存放執行緒的id。
注意:傳遞給
執行緒執行函式的引數不能是區域性變數,而且必須是引數的位址。如:
int noffset = 10;2)afxbeginthread (執行緒執行函式必須是static成員函式)createthread(null,0,threadproc,noffset,0,&dwthreadid[i]);//錯誤
createthread(null,0,threadproc,&noffset,0,&dwthreadid[i]);//錯誤
int *poffset = newint(10);
createthread(null,0,threadproc,poffset,0,&dwthreadid[i]);//正確
(此處參考
使用者介面執行緒和工作者執行緒都是由afxbeginthread建立的。現在,考察該函式:mfc提供了兩個過載版的afxbeginthread,乙個用於使用者介面執行緒,另乙個用於工作者執行緒,分別有如下的原型和過程:工作者執行緒的afxbeginthread
工作者執行緒的afxbeginthread的原型如下:afx_threadproc pfnthreadproc, //執行緒的入口函式,宣告如下: uint mythreadfunction( lpvoid pparam )cwinthread* afxapi afxbeginthread(
lpvoid pparam,//傳遞入執行緒引數,注意型別為:lpvoid,所以我們可傳遞結構體入執行緒使用方法:int npriority, //3、4、5分別指優先順序、堆疊大小、建立標識、安全屬性,含義同使用者
uint nstacksize,
dword dwcreateflags,
lpsecurity_attributes lpsecurityattrs)
//宣告執行緒執行函式:static uint threadproduct(void *param);
//建立執行緒:m_pthreadconsumer = afxbeginthread(threadconsumer,this);//後面的引數都省略了
//把this傳過去,就可呼叫類成員. 執行緒函式就可使用和操作類的成員。注意執行緒函式是靜態類函式成員。
想要結束非ui執行緒,可以直接afxendthread
使用者介面執行緒的afxbeginthread
使用者介面執行緒的afxbeginthread的原型如下:使用方法:因為要處理訊息所以需要建立乙個訊息迴圈。從cwinthread派生出乙個類,再呼叫afxbeginthread產生乙個cwinthread物件。因為訊息迴圈的存在,要結束乙個ui執行緒必須在訊息佇列中放乙個wm_quitcwinthread* afxapi afxbeginthread(
cruntimeclass* pthreadclass, //
從cwinthread派生的runtime_class類
int npriority,
//定執行緒優先順序,如果為0,則與建立該執行緒的執行緒相同;
uint nstacksize,
//執行緒的堆疊大小,如果為0,則與建立該執行緒的執行緒相同;
dword dwcreateflags,
//建立標識,create_suspended,則懸掛狀態建立,否則建立後
執行。lpsecurity_attributes lpsecurityattrs) //
執行緒的安全屬性,nt下有用
上述解釋參考:
具體使用哪一種函式建立執行緒見
注意:無論是worker 或者ui執行緒,結束時都必須delete cwinthread物件
3 關於多執行緒計算的速度和cpu使用效率的解答
執行緒的建立
執行緒在thread物件建立時開始啟動,傳遞給執行緒的函式執行結束時,執行緒也結束。執行緒thread建構函式 template explicit thread fn fx,args ax thread thread other noexcept thr other.thr thread opera...
執行緒的建立
執行緒的建立 1 使用createthread函式建立執行緒 handle createthread lpsecurity attributes lpsa,dword cbstack,lpthread start routine lpstartaddr,lpvoid lpvthreadparam,d...
執行緒的建立
include int pthread create pthread t thread,const pthread attr t attr,void start routine void void arg 1 引數及返回值 2 編譯注意事項 include include void printids...