多線程(三)

1.線程的優先級:

線程的相對優先級有以下取值:
THREAD_PRIORITY_TIME_CRITICAL:Time-critical,關鍵時間(最高)
THREAD_PRIORITY_HIGHEST:Highest,最高(其實是“次高”)
THREAD_PRIORITY_ABOVE_NORMAL:Above normal,高於標準
THREAD_PRIORITY_NORMAL:Normal,標準
THREAD_PRIORITY_BELOW_NORMAL:Below normal,低於標準
THREAD_PRIORITY_LOWEST:Lowest,最低(其實是“次低”)
THREAD_PRIORITY_IDLE:Idle,空閒(最低)

AfxBeginThread 創建的線程可以直接在創建的時候指定,而 CreateThread 需要創建之後指定!
獲取:GetThreadPriority

WINBASEAPI
int
WINAPI
GetThreadPriority(
    __in HANDLE hThread
    );
hThread是線程的句柄。
返回值是線程的優先級。


設置:SetThreadPriority

BOOL
WINAPI
SetThreadPriority(
    __in HANDLE hThread,
    __in int nPriority
    );
hThread是線程的句柄。
nPriority是線程的優先級。
 

2.線程的退出與終結:

1、最好的方式:讓線程函數主動退出,或者 return;
可以保證線程函數裏面對象的析構函數被調用,以及線程申請的相關空間被釋放;

2、線程自己主動退出,可以調用 ExitThread(MFC中使用 AfxEndThread);
線程函數裏面對象的析構函數不會被調用,線程申請的相關空間被釋放;
所以,在C語言裏面可以使用該函數退出線程,但在C++裏面不建議,因爲C++裏面有類!

3、其他程序強行結束目標線程:可以調用 TerminateThread
此函數非常危險,被結束的線程不會得到任何通知,線程申請的相關空間也不會被釋放!
所以,離他遠點!

4、線程退出碼的獲取:GetExitCodeThread

BOOL   GetExitCodeThread (

       HANDLE         hThread,                  // in,線程handle,也就是CreateThread()的返回值

       LPDWORD      lpExitCode               //out,存儲線程結束代碼,也就是線程的返回值

);

說明: 此函數調用成功返回TRUE,失敗返回FALSE,只表示這個函數是否調用成功而己.

        不能根據返回值來判斷一個線程是否結束,而要根據 lpExitCode的值來確定,

        lpExitCode  值STILL_ACTIVE 表示線程正在運行.

        若線程己經結束,則lpExitCode中存儲指定線程的返回值.

前提:句柄有效,不被關閉!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章