使用者介面執行緒和工作者執行緒都是由afxbeginthread建立的,mfc提供了兩個過載版的afxbeginthread,乙個用於使用者介面執行緒,另乙個用於工作者執行緒。
使用者介面執行緒的afxbeginthread:
cwinthread* afxapi afxbeginthread(
afx_threadproc pfnthreadproc,
lpvoid pparam,
int npriority,
uint nstacksize,
dword dwcreateflags,
lpsecurity_attributes lpsecurityattrs= null
1.第1個引數afx_threadproc pfnthreadproc為執行緒呼叫函式名稱。afx說明是個全域性函式,為了方便以後定義的時候,直接定義為static uint jisuan(lpvoid lpparam)靜態函式就行。
idle (最低)
thread_priority_idle
如果程序優先順序為realtime則調整為16,其它情況為1
lowest 低
thread_priority_lowest
-2(在原有基礎上-2)
below 低於標準
thread_priority_below_normal
-1(在原有基礎上-1)
normal(標準)
thread_priority_normal
不變(取程序優先順序值)
above 高於標準
thread_priority_above_normal
+1(在原有基礎上+1)
highest (高)
thread_priority_highest
+2(在原有基礎上+2)
critical(最高)
thread_priority_time_critical
如果程序優先順序為realtime則調整為31,其它情況為15
4.第4個引數nstacksize: 以位元組為單位指定新執行緒的堆疊大小。如果為0,則與建立它的執行緒的堆疊大小相同。
5.第5個引數dwcreateflags:指定乙個額外的標誌控制線程的產生。它可以包括下面兩個值中的個:create_suspended:以掛起模式開始執行緒,並且指定掛起次數.當呼叫resumethread時,這個執行緒才會被執行。0 :建立之後,馬上執行執行緒。
6.第6個引數lpsecurityattrs 預設為null就行。
建立執行緒後,如果成功則會返回cwinthread* pthread的變數。這個變數可用於對執行緒的控制,如果要暫停執行緒:pthread->suspendthread();如果要繼續執行緒pthread->resumethread();
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...