2011-09-19 48 views
2

我想使用多線程和封裝在函數foo中的所有東西來做一些事情。如何獲取第一個參數的_StartAddress的返回值_beginthread

filterThread = _beginthread (foo, 0,NULL) ; 

,我想讓foo返回值:

int foo() 
{ 
    return iRet; 
} 

但_beginthread _CRTIMP uintptr_t __cdecl _beginthread (_In_ void (__cdecl * _StartAddress) (void *), _In_ unsigned _StackSize, _In_opt_ void * _ArgList)的原型表明foo必須是無效的,這意味着不能返回值。 有什麼辦法可以讓foo返回值嗎?

回答

1

要獲得又名線程的退出代碼返回值:

呼籲線程的處理this功能,它已經完成後,

DWORD ExitCode; 
GetExitCodeThread(hThread, &ExitCode); 

作爲一個例子,可以考慮使用_beginthreadex代替,

unsigned __stdcall foo(void* pArguments) 
{ 
    _endthreadex(0); 
    return 0; 
} 

int main() 
{ 
    HANDLE hThread; 
    unsigned threadID; 

    hThread = (HANDLE)_beginthreadex(NULL, 0, foo, NULL, 0, &threadID); 

    WaitForSingleObject(hThread, INFINITE); 

    CloseHandle(hThread); 
} 
相關問題