0

MFC を使用して C++ でプログラミングしています。

UI が完全にロードされた後にコードの一部を実行したいので、OnTimer コールバックに入れ、OnInitDialog で SetTimer を呼び出しました。問題は、そのタイマーを 1 回だけ実行する方法です。

どんな助けでも大歓迎です。

4

3 に答える 3

2

KillTimer関数を使用する必要がありますが、タイマーを1回だけ実行することに注意する必要があります。たとえば、次のようなコードを記述します。

#define TID_ONLY_ONCE WM_USER + 202
void CSampleDlg::OnTimer(UINT_PTR nIDEvent)
{
    if(nIDEvent == TID_ONLY_ONCE)
    {
        KillTimer(TID_ONLY_ONCE);
        SomethingLongProcess(pSomeData);
    }
    CDialog::OnTimer(nIDEvent);
}

タイマーの経過時間を短く設定すると、KillTimer を呼び出しても、SomethingLongProcess は時間がかかるため、ontimer() が複数回実行されます。そこで、これを避けるために、

  • SetTimer() を呼び出した直後に KillTimer() を呼び出します。
  • または、グローバル bool メンバーを使用します。SetTimer を呼び出した後、グローバル メンバーを true に設定し、OnTimer() でこの値を確認して、SomethingLongProcess() が実行されるかどうかを確認します。

これが少し役立つことを願っています。

于 2013-05-12T01:09:14.227 に答える
1

タイマーを使用する代わりに、PostMessage を使用して自分自身にメッセージを投稿することもできます。これにより、保留中のウィンドウ メッセージ キューが処理されます。その後、PostMessage ハンドラーで必要なことを行うことができます。そうすれば、タイマーを殺すことを心配する必要はありません。( http://msdn.microsoft.com/en-us/library/9tdesxec%28v=vs.80%29.aspxを参照)

于 2013-05-13T03:06:45.363 に答える
-1

タイマー関数が初めて呼び出されるときは、KillTimer を呼び出します。

于 2013-05-12T00:13:32.300 に答える