1. 程式人生 > >如何獲得執行緒的返回值?

如何獲得執行緒的返回值?

最近在學習多執行緒程式設計技術過程中,遇到一個問題:如何獲取執行緒的返回值?

 

執行緒定義之初:

UINT Class::Thread(LPVOID lpParam)
{
        return bResult;
}

 

開啟執行緒:

CWinThread *hThread = AfxBeginThread(Thread, lpParam, 0, 0, NULL);

 

獲得執行緒返回值bResult的方法有兩個:


1、通過 全域性變數
執行緒函式的定義中bResult為全域性變數,直接訪問bResult就可以獲得執行緒函式的返回值,並結合線程函式的定義判斷執行緒退出時的狀態。


2、通過 API 函式
函式: GetExitCodeThread()
功能: 獲取一個結束執行緒的返回值
函式原形: BOOL GetExitCodeThread( HANDLE hThread,  LPDWORD lpExitCode);
引數: hThread 指向欲獲取返回值的執行緒物件的控制代碼
               lpExitCode 用於儲存執行緒的返回值
返回值:函式執行成功則返回非0值,否則返回 0(FALSE)


值得注意的是:呼叫該函式獲得的返回值 lpExitCode = bResult,除非執行緒函式定義之初能夠通過 bResult 判斷執行緒的完成度,否則不能通過 lpExitCode 的值對執行緒的狀態做出判斷。那麼,能否通過GetExitCodeThread()函式的返回值對執行緒的狀態做出判斷哪? 當然這也是不行的。