2

我想使用多线程和封装在 function 中的所有东西来做一些事情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返回值?

4

2 回答 2

2

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

于 2011-09-19T03:19:36.953 回答
1

要获取线程的返回值,也就是退出代码:

完成后在线程的句柄上调用此函数,

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 );
}
于 2011-09-19T03:12:07.643 回答