如何获取函数_beginthread的第一个参数_StartAddress的返回值

时间:2011-09-19 02:53:52

标签: c multithreading return beginthread

我想使用多线程和函数foo中封装的所有内容来做一些事情。

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必须为void,这意味着无法返回值。 有什么方法可以让foo返回值吗?

2 个答案:

答案 0 :(得分:2)

使用_beginthreadex代替。这允许您使用返回值的函数。然后,您可以使用GetExitCodeThread在线程完成时获取值。

答案 1 :(得分: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 );
}