スレッドの終了コードの取得は、GetExitCodeThread()関数で取得できます。スレッド側では、スレッドを終了させる際に、_endthreadex()関数を呼び出して終了コードを設定しておきます。
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <string>
#include <process.h>
#include <windows.h>
/*
スレッドメイン処理
*/
unsigned __stdcall ThreadMain
(
void* vpArguments
)
{
std::wcout << L"スレッド開始( 引数 = " << (int)vpArguments << L" )" << std::endl;
/*
スレッドメイン処理
*/
for ( UINT nI = 0; nI < 10; nI++ ) {
std::wcout << L"スレッド処理中( " << nI << L" )" << std::endl;
// 1秒待ち
::Sleep( 1000 );
}
/*
スレッドの終了
この値はGetExitCodeThread()で取得できる
*/
std::wcout << L"スレッド終了" << std::endl;
::_endthreadex( 1234 );
// 処理結果
return( 0 );
}
/*
スレッドの終了コードを取得する
*/
int _tmain
(
int argc
, _TCHAR* argv[]
)
{
/*
std::wcoutのロケールを設定
これを設定するだけで、std::wcoutで日本語が表示される
ようになります。
*/
std::wcout.imbue( std::locale( "", std::locale::ctype ) );
UINT nThreadId = 0;
// スレッド起動
HANDLE hThread = (HANDLE)::_beginthreadex(
NULL // SECURITY_ATTRIBUTES構造体
, 0 // スタックサイズ( 0は呼び出し側と同じサイズ )
, &ThreadMain // スレッド関数
, (void*)12345678 // スレッド関数への引数
, 0 // 作成オプション( 0 / CREATE_SUSPENDED )
, &nThreadId // スレッドId
);
std::wcout << L"スレッド起動 Id = " << nThreadId << std::endl;
// スレッドの終了待ち
::WaitForSingleObject( hThread, INFINITE );
DWORD dwExitCode = 0;
// スレッドの終了コードを取得
::GetExitCodeThread( hThread, &dwExitCode );
std::wcout << L"スレッド終了コード( " << dwExitCode << L" )" << std::endl;
// スレッドハンドルの解放
::CloseHandle( hThread );
// 処理結果
return( 0 );
}
スレッド起動 Id = 12976 スレッド開始( 引数 = 12345678 ) スレッド処理中( 0 ) スレッド処理中( 1 ) スレッド処理中( 2 ) スレッド処理中( 3 ) スレッド処理中( 4 ) スレッド処理中( 5 ) スレッド処理中( 6 ) スレッド処理中( 7 ) スレッド処理中( 8 ) スレッド処理中( 9 ) スレッド終了 スレッド終了コード( 1234 )