天天看點

mfc線程

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指針作為參數。

長風破浪會有時,直挂雲帆濟滄海!