afxbeginthread
mfc提供了兩個過載版的afxbeginthread,乙個用於使用者介面執行緒,另乙個用於工作者執行緒,區別在於使用者介面執行緒能處理訊息響應,而工作者執行緒不能。其原型和過程:
使用者介面執行緒的afxbeginthread
使用者介面執行緒的afxbeginthread的原型如下:
cwinthread* afxapi afxbeginthread
(cruntimeclass* pthreadclass,
int npriority,
uint nstacksize,
dword dwcreateflags,
lpsecurity_attributes lpsecurityattrs)
工作者執行緒的afxbeginthread
工作者執行緒的afxbeginthread的原型如下:
cwinthread* afxapi afxbeginthread
(afx_threadproc pfnthreadproc,
lpvoid pparam,
int npriority,
uint nstacksize,
dword dwcreateflags,
lpsecurity_attributes lpsecurityattrs)
其中:
引數1 執行緒的入口函式,宣告一定要如下: uint mythreadfunction( lpvoid pparam );
引數2 傳遞入執行緒的引數,注意它的型別為:lpvoid,所以我們可以傳遞乙個結構體入執行緒.
引數3、4、5分別指定執行緒的優先順序、堆疊大小、建立標識、安全屬性,含義同使用者介面執行緒。
afxbeginthread除前面兩個引數外,後面幾個都是預設引數,可以省略。前兩個引數中,第乙個是執行緒函式的指標,第二個是傳遞給這個函式的引數。實際中我們經常這樣用:
afxbeginthread
(threadproc,
this
);
把this傳過去,執行緒函式就可以使用和操作類的成員了。千萬要注意執行緒函式是靜態類函式成員。
附錄a:
結束執行緒的兩種方式:
AfxBeginThread 幹了什麼?
跟一跟afxbeginthread的原始碼就可以很容易的發現,它呼叫了 beginthreadex,注意這傢伙傳遞的可不是你傳進去的函式函式指標,它傳的是 afxthreadentry和乙個 afx thread startup的結構,那我們的函式指標和引數呢?哦,原來都被封裝到 afx threa...
AfxBeginThread函式初探
在進行多執行緒程式設計的時候,我們經常用到afxbeginthread函式來啟動一條執行緒 該函式使用起來非常的簡單方便,其定義如下 cwinthread afxbeginthread afx threadproc pfnthreadproc,執行緒函式位址 lpvoid pparam,執行緒引數 ...
AfxBeginThread建立執行緒
使用者介面執行緒和工作者執行緒都是由afxbeginthread建立的。mfc提供了兩個過載版的afxbeginthread,乙個用於使用者介面執行緒,另乙個用於工作者執行緒,分別有如下的原型 使用者介面執行緒的afxbeginthread的原型如下 cwinthread afxapi afxbeg...