我想使用多线程和函数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
返回值吗?
答案 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 );
}