MFC を使用して C++ でプログラミングしています。
UI が完全にロードされた後にコードの一部を実行したいので、OnTimer コールバックに入れ、OnInitDialog で SetTimer を呼び出しました。問題は、そのタイマーを 1 回だけ実行する方法です。
どんな助けでも大歓迎です。
MFC を使用して C++ でプログラミングしています。
UI が完全にロードされた後にコードの一部を実行したいので、OnTimer コールバックに入れ、OnInitDialog で SetTimer を呼び出しました。問題は、そのタイマーを 1 回だけ実行する方法です。
どんな助けでも大歓迎です。
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() が複数回実行されます。そこで、これを避けるために、
これが少し役立つことを願っています。
タイマーを使用する代わりに、PostMessage を使用して自分自身にメッセージを投稿することもできます。これにより、保留中のウィンドウ メッセージ キューが処理されます。その後、PostMessage ハンドラーで必要なことを行うことができます。そうすれば、タイマーを殺すことを心配する必要はありません。( http://msdn.microsoft.com/en-us/library/9tdesxec%28v=vs.80%29.aspxを参照)
タイマー関数が初めて呼び出されるときは、KillTimer を呼び出します。