スレッド終了、GetExitCodeThread後終了値ずっとSTILL_ACTIVE,259の質問


最近はVC++で視覚検出システムを記述しており,その中で開いているスレッドが比較的多い.スレッドがいつ終わるかを知ることが重要な問題です.GetExitCodeThread()関数が使用されます.関数のプロトタイプは次のとおりです.
   BOOL   GetExitCodeThread (
   HANDLE         hThread,
   LPDWORD      lpExitCode
   );

ここで、hThreadは、表示するスレッドのハンドルを表し、lpExitCodeは関数呼び出し時に渡されてスレッド状態を保存するDWORDタイプのポインタである.値がSTILL_未満の場合ACTIVEはスレッドが終了していないことを示す.この関数の戻り値は,スレッドの状態とは何の関係もない.関数が正常に実行されたかどうかを示すだけです.この関数を再使用するときに問題が発生し、スレッドは終了しました.スレッドにループがあるかどうかを確認できます.ループはもう実行されていません.しかしこの関数で得られた状態コードはずっとSTILL_ACTIVEは、実際にコンパイラで見たときは259、16進数に変換するとSTILL_ACTIVE.コードは次のとおりです.
if ( m_pThreadVelocity )
    {
        DWORD dwExitCode = 0;
        do
        {
            GetExitCodeThread(m_pThreadVelocity->m_hThread, &dwExitCode);
        }
        while( STILL_ACTIVE == dwExitCode );
        m_pThreadVelocity = NULL;
    }
    m_pThreadVelocity = AfxBeginThread(fnVelocityAndMeterThread, &m_VelocityAndMeterThreadParam, THREAD_PRIORITY_TIME_CRITICAL);

ずっとどのように解决することを知らないで、それから一回の偶然の机会は更にGetExitCodeThread関数の前に先に、dwExitCodeを初期化して、正常になりました.コードは次のとおりです.
if ( m_pThreadVelocity )
    {
        DWORD dwExitCode = 0;
        do
        {
            dwExitCode = 0;
            GetExitCodeThread(m_pThreadVelocity->m_hThread, &dwExitCode);
        }
        while( STILL_ACTIVE == dwExitCode );
        m_pThreadVelocity = NULL;
    }
    m_pThreadVelocity = AfxBeginThread(fnVelocityAndMeterThread, &m_VelocityAndMeterThreadParam, THREAD_PRIORITY_TIME_CRITICAL);
}

具体的な理由は不明ですが、この関数の内部でlpExitCodeに値を割り当てるときは単純な直接値ではない可能性があります.STILL_ACTIVEの値は(((DWORD)0 x 0000103 L)であり、DWORDは実際にはunsigned charである.STILL_ACTIVEの値は実際には16進数です.10進数に変換すると259です.ここではlpExitCode付与は簡単な*lpExitCode=xxなどではないかもしれません.したがってGetExitCodeを実行するたびに*lpExitCodeの値を再初期化する必要があるでしょう.