終止執行緒的執行
若要終止執行緒的執行,可以使用下面的方法:
•執行緒函式返回(最好使用這種方法)。
•通過呼叫
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的位,他們可以被解釋為整數或者其他,這取決...