多執行緒之執行緒的中止

2021-06-22 21:37:11 字數 1644 閱讀 5007

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...