Чтобы получить возвращаемое значение или код завершения потока:
Вызвать эту функцию на дескрипторе потока после его завершения,
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 );
}