1、生成線程
方式1、
handle hthread; //線程句柄
hthread=createthread(null,0,(lpthread_start_routine)threadfunc,null,0,null);//獲得句柄
closehandle(hthread);//如果後面不需要操作這個線程就可以把線程句柄關掉,但是線程不會被關,線程函數結束,線程才結束
方式2、
afxbeginthread(threadfunc, this);【對createthread的封裝】
2、線程函數
static uint threadfunc(lpvoid pparam) //必須是靜态的
{
cdialog *new_this = (cdialog*)pparam;//新指針
while(1)
{
sleep(2000);
afxmessagebox(_t("ok!"));
}
}
ps:常用的三種開啟線程的函數
1、createthread
這是windows api函數,在windows上程式設計最後都會調用這個函數,這個函數用起來很危險,涉及程序、線程同步,記憶體相關的操作,不建議使用
2、afxbeginthread
這是mfc提供的全局函數
3、_beginthread
這是調用c的函數,可以放心的使用标準c運作時庫的東西
ps:入口函數隻能是全局函數或者類的靜态成員函數,為什麼?
首先類的成員函數是能夠通路類裡的成員變量的,那麼為什麼能通路呢?是因為編譯器自動為所有成員函數增加一個參數,對象的this指針。比如:
但是線程函數在初始化的時候,一般會向線程函數傳遞參數,是以參數個數是固定的,如create(fun,100),這裡100就是傳遞的參數。然而fun是類成員函數,除了int參數還需要一個this指針,是以這裡傳遞的參數就少了。使用全局函數和靜态函數的原因就是,沒有這個隐含的this指針作為參數。
長風破浪會有時,直挂雲帆濟滄海!