// The following sample code demonstrates how you can use the thread handle returned by _beginthreadex with the synchronization
// API WaitForSingleObject.
// The main thread waits for the second thread to terminate before it continues.
// When the second thread calls _endthreadex, it causes its thread object to go to the signaled state.
// This allows the primary thread to continue running.
// This cannot be done with _beginthread and _endthread, because _endthread calls CloseHandle, destroying the thread object before
// it can be set to the signaled state.
//
// crt_begthrdex.cpp
// compile with: /MT
#include <windows.h>
#include <stdio.h>
#include <process.h>
unsigned Counter;
unsigned __stdcall SecondThreadFunc( void* pArguments )
{
printf( "In second thread...\n" );
while ( Counter < 1000000 )
Counter++;
_endthreadex( 0 );
return 0;
}
int main()
{
HANDLE hThread;
unsigned threadID;
printf( "Creating second thread...\n" );
// Create the second thread.
hThread = (HANDLE)_beginthreadex( NULL, 0, &SecondThreadFunc, NULL, 0, &threadID );
// Wait until second thread terminates. If you comment out the line
// below, Counter will not be correct because the thread has not
// terminated, and Counter most likely has not been incremented to
// 1000000 yet.
WaitForSingleObject( hThread, INFINITE );
printf( "Counter should be 1000000; it is-> %d\n", Counter );
// Destroy the thread object.
CloseHandle( hThread );
}
Это пример из MSDN. А вопрос такой.
1. Если из функции потока SecondThreadFunc() выходить без использования _endthreadex(0), а просто по return, то при этом thread object to go to the signaled state или нет? Хэндл потока установится в сигнальное состояние или нет?
2. Если из функции потока SecondThreadFunc() выходить без использования _endthreadex(0), а просто по return, то надо ли вызывать после этого CloseHandle( hThread );?