1 安全中止執行緒
安全中止執行緒有以下兩種方法:
1.1 執行緒函式返回
直接使用return語句。
1.2 呼叫afxendthread函式
函式定義如下:
void afxendthread(uint nexitcode);
引數nexitcode為執行緒的退出碼。
執行緒0**:
setevent(m_pthread1->m_hendevent);
::waitforsingleobject(m_pthread1->m_hthread, infinite);
執行緒1**:
int cthread1::run()}}
2 獲得執行緒的退出碼
通過呼叫getexitcodethread函式可以獲得執行緒的退出碼。
函式定義如下:
bool getexitcodethread(handle hthread,lpdword lpexitcode);
引數hthread為執行緒的控制代碼(輸入引數),引數lpexitcode為指向退出碼位址的指標(輸出引數)。
如果如果執行緒為執行狀態,getexitcodethread將用標誌符still_active(定義為0x103)填入該位址;否則用退出碼的填入該位址。**如下:
if (getexitcodethread(hthread, &dwexitcode))
else
}預設情況下,當乙個cwinthread執行緒中止時執行緒物件會被撤銷(m_bautodelete=true),這意味著不能得到執行緒控制代碼(cwinthread成員變數m_hthread),因為cwinthread物件已經不存在了。為了避免這種情況,可以採用以下兩種方法:
2.1 設定m_bautodelete
設定cwinthread成員變數m_bautodelete為false,這樣當執行緒中止時執行緒物件不會被撤銷,因此仍然可以獲得執行緒控制代碼。
m_pthread1 = (cmythread1*)afxbeginthread
(runtime_class(cmythread1),
thread_priority_above_normal,
0, create_suspended);
m_pthread1->m_bautodelete = false;
m_pthread1->resumethread();
if (m_pthread1 != null)
2.2 儲存執行緒控制代碼
m_pthread2 = (cmythread2*)afxbeginthread
(runtime_class(cmythread2),
thread_priority_above_normal,
0, create_suspended);
m_pthread2->m_bautodelete = true; //預設值
::duplicatehandle(getcurrentprocess(),
m_pthread2->m_hthread,
getcurrentprocess(),
&m_hthread2,
0,false,
duplicate_same_access);
m_pthread2->resumethread();
本文**:
多執行緒之啟動,中止,及其他
1.runnable是thread執行的邏輯 2.callablefuturetask也是thread要執行的邏輯,只是封裝了獲取結果的功能 因此 啟動執行緒的方式只有一種 new thread start 示例 public class demo stop 輸出結果 thread.print cl...
c 多執行緒 中止前清理
gcc lpthread std c99 o main main.c deepfuture deepfuture laptop mytest main 1chen1 2chen2 3chen6 4chen24 5chen120 6chen720 7chen5040 8chen40320 9chen3...
多執行緒之執行緒同步
pulse lockobj 表示釋放當前被lock的lockobj,容許其他執行緒呼叫。相當於暫時掛起當前執行緒 wait lockobj 表示等待當前被其他執行緒占用的lockobj。下面的 將會交替執行兩個執行緒 class ticktock console.write tick monitor...