第六章(4)終止執行緒的執行

2021-09-08 06:49:19 字數 2318 閱讀 3955

終止執行緒的執行

若要終止執行緒的執行,可以使用下面的方法:

•執行緒函式返回(最好使用這種方法)。

•通過呼叫

exitthread

函式,執行緒將自行撤消(最好不要使用這種方法)。

•同乙個程序或另乙個程序中的執行緒呼叫

terminatethread

函式(應該避免使用這種方法)。

•包含執行緒的程序終止執行(應該避免使用這種方法)。

執行緒函式返回

始終都應該將執行緒設計成這樣的形式,即當想要執行緒終止執行時,它們就能夠返回。這是確保所有執行緒資源被正確地清除的唯一辦法。

如果執行緒能夠返回,就可以確保下列事項的實現:

•c + +

物件均將通過它們的撤消函式正確地撤消。 •

作業系統將正確地釋放執行緒堆疊使用的記憶體。 •

•系統將遞減執行緒核心物件的使用計數。

exitthread

函式可以讓執行緒呼叫

exitthread

函式,以便強制執行緒終止執行:

void exitthread(dword dwexitcode);

該函式將終止執行緒的執行,並導致作業系統清除該執行緒使用的所有作業系統資源。但是,

c++資源(如

c++類物件)將不被撤消。

exitthread

函式是windows

用來撤消執行緒的函式。如果編寫

c/c++

**,應該使用編譯環境的執行期函式(

visual c++

的_ endthreadex)。

terminatethread

函式bool terminatethread

(handle hthread

,dword dwexitcode);

hthread

引數用於標識被終止執行的執行緒的控制代碼。當執行緒終止執行時,它的退出**成為你作為

dwexitcode

引數傳遞的值。同時,執行緒的核心物件的使用計數也被遞減。

exitthread

總是撤消呼叫的執行緒,而

terminatethread

能夠撤消任何執行緒。

terminatethread

是非同步執行的函式,當函式返回時,不能保證執行緒被撤消。當使用返回或呼叫

exitthread

的方法撤消執行緒時,該執行緒的記憶體堆疊也被撤消。但

terminatethread

設計良好的應用程式從來不使用這個函式,

因為被終止執行的執行緒收不到它被撤消的通知。執行緒不能正確地清除,並且不能防止自己被撤消。

在程序終止執行時撤消執行緒

由於整個程序已經被關閉,程序使用的所有資源肯定已被清除。這當然包括所有執行緒的堆疊。這兩個函式會導致程序中的剩餘執行緒被強制撤消,這意味著正確的應用程式清除沒有發生。

執行緒終止執行時發生的操作

當執行緒終止執行時,會發生下列操作:

•執行緒擁有的所有使用者物件均被釋放。在

windows

中,大多數物件是由包含建立這些物件的執行緒的程序擁有的。但是乙個執行緒擁有兩個使用者物件,即視窗和掛鉤。當執行緒終止執行時,系統會自動撤消任何視窗,並且解除安裝執行緒建立的或安裝的任何掛鉤。其他物件只有在擁有執行緒的程序終止執行時才被撤消。 •

執行緒的退出**從

s t i l l _ a c t i v e

改為傳遞給

exitthread

或terminatethread

的**。 •

執行緒核心物件的狀態變為已通知。 •

如果執行緒是程序中最後乙個活動執行緒,系統也將程序視為已經終止執行。 •

執行緒核心物件的使用計數遞減1。

當乙個執行緒終止執行時,在與它相關聯的執行緒核心物件的所有未結束的引用關閉之前,該

核心物件不會自動被釋放。

一旦執行緒不再執行,系統中就沒有別的執行緒能夠處理該執行緒的控制代碼。然而別的執行緒可以呼叫

getexitcodethread

來檢查由

h t h r e a d

標識的執行緒是否已經終止執行。

bool getexitcodethread(handle hthread, pdword pdwexitcode);

退出**的值在

pdwexitcode

指向的dword

中返回。如果呼叫

getexitcodethread

時執行緒尚未終止執行,該函式就用

still_active

識別符號(定義為

0 x 1 0 3

)填入dword

。如果該函式執行成功,便返回

t r u e

mysql第六章 第六章 mysql日誌

第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...

第六章 基礎紋理(4)

什麼是遮罩呢?簡單來講,遮罩可以允許我們保護某些區域,使它們免於 某些修改。例如,在之前的實現中,我們都是把高光反射應用到模型表面的所有地方,即所有的畫素都使用同樣大小的高光強度和高光指數。但有時我們希望模型表面的某些區域的反光強一些,而某些區域弱一些。為了得到更加細膩的效果,我們就可以使用一張遮罩...

第六章 指標

1.多位元組資料的位址是在最左邊還是最右邊的位置,不同的機器有不同的規定,這也正是大端和小端的區別,位址也要遵從邊界對齊 2.高階語言的乙個特性就是通過名字而不是位址來訪問記憶體的位置,但是硬體仍然通過位址訪問記憶體位置 3.記憶體中的變數都是義序列的0或1的位,他們可以被解釋為整數或者其他,這取決...