0

私のアプリケーションは、特定のアクションを許可または許可しないように、時間を追跡し、さまざまな段階でユーザーに警告する必要があります。ユーザーが待機するので、進行状況を表示して待機時間を表示したい。たとえば、私のデバイスは、起動してから使用できるようになるまで 5 分間待機する必要があります。問題は、ユーザーが複数のダイアログに移動でき、これらのダイアログのうち 2 つに進行状況バーを表示したいことです。スレッドを使用して「時計を実行」し、進行状況バーを更新する必要があるとき、または時間アクティビティが完了したときにメッセージを GUI に投稿します。

問題は、スレッドから通知を受け取ることができる初期ウィンドウのハンドルを渡すことができることですが、ユーザーが他の画面に移動するとどうなりますか? この別のウィンドウはまだ存在しません。私が使用できる他のメカニズムはありますか?私の目標は、両方のダイアログでタイム チェック コードを再利用することです。

非常に単純化されたコードを以下に示します。

UINT MonitorTimeThread(LPVOID pVoid )
{
    HWND hWnd = ( HWND ) pVoid;

    HANDLE timer = ::CreateWaitableTimer(NULL, FALSE, NULL);

    SYSTEMTIME t;
    ::GetSystemTime(&t);

    LARGE_INTEGER alarm;
    ::SystemTimeToFileTime(&t, (FILETIME *)&alarm);
    ::SetWaitableTimer(timer, &alarm, 5000, NULL, NULL, FALSE);

    bool done = false;

    while (!done )
    {

        if (WaitForSingleObject( timer, INFINITE ) == WAIT_OBJECT_0 )
        {
            TRACE("time inteval has passed\r\n");

            // update the progress bar on GUI
            PostThreadMessage(hWnd, UM_PROGRESS_TICK, 0 );

            // if user has switch to another window, how to direct messages to that?
        }
    }

    return 0;
}
4

1 に答える 1