マルチスレッドアプリを書いています。メインスレッドには、モードレスダイアログボックスであるメインウィンドウがあります。ユーザーがスタートボタンをクリックすると、長い間いくつかのことを行う新しいスレッドが作成されます。メインスレッド上に、新しいモードレスダイアログボックスが作成され、その新しいスレッドのステータスがスレッドごとに1つ表示されます。リソースエディタを使用して一種のテンプレートダイアログボックスを作成し、ステータスの静的テキストをIDC_STATIC_NUMCYCLEのIDに設定しました。OnIdle関数中にスレッドのステータスをポーリングします。ステータスの更新は1つのスレッドでのみ機能しますが、さらにスポーンすると、すべての静的テキストは最後まで更新されないか、実行されている唯一のスレッドである場合に更新されません。
宣言:
map<CSimDlg *, CSimulator *> simulations;
私のOnIdle関数:
BOOL CFGSim1App::OnIdle(LONG lCount)
{
CWinApp::OnIdle(lCount);
DWORD exitCode;
CString numOfCycle;
for (map<CSimDlg *, CSimulator *>::iterator iter = simulations.begin(); iter != simulations.end();)
{
    // skip already finished threads
    if (iter->second == NULL)
    {
        iter++;
        continue;
    }
    if (GetExitCodeThread(iter->second->m_hThread, &exitCode))
    {
        if (exitCode == 0)
        {
            delete iter->second;
            iter->second = NULL;
            if (IsWindow(iter->first->m_hWnd))
            {
                iter->first->SetDlgItemText(IDC_STATIC_SIMSTATUS, L"Simulation done");
            }
            else
            {
                iter = simulations.erase(iter);
            }
        }
        else
        {
            ULONG64 temp = iter->second->m_ul64NumOfCycle;
            if (temp % 10000 == 0)
            {
                numOfCycle.Format(_T("%d"), temp);
                iter->first->SetDlgItemText(IDC_STATIC_NUMCYCLE, numOfCycle);
            }
            iter++;
        }
    }
    else
    {
        iter++;
    }   
}
return TRUE;
}
問題は静的テキストのIDにあると思います。これを回避する方法はありますか?または、ダイアログボックスごとに異なるIDを宣言する必要がありますか?それとも他の場所に問題がありますか?