2011-08-23 16 views
14

Visual Studio 2008でMFC Dialogベースのアプリケーションを開発しています。アプリケーションの起動時に起動するタイマを使用して、実行し続けてタスクを実行する関数を呼び出しますか?これどうやってするの?MFCダイアログベースのアプリケーションでTimerを使用する方法?

おかげ

+0

http://msdn.microsoft.com/en-us/library/49313fdf(v=vs.80).aspx – YeenFei

+0

このエラーが発生しました:エラーC3867: 'CHDVRLauncherDlg :: TimerFunction':関数呼び出しの引数がありませんリスト; '&CHDVRLauncherDlg :: TimerFunction'を使用して、メンバーへのポインターを作成します。私が静的なコールバック関数を宣言した場合、私はこのコールバックから他の関数​​を呼び出すことができません。私はMFCが初めてです。ありがとうございます –

+0

他の方法としては、現在の時間を毎回取得し、十分な時間が経過したかどうかを確認するか、sleep(long millisecs);を呼び出す新しいスレッド(またはプロセス)を開始してからあなたが望む機能。 –

答えて

18

だけSetTimerメソッドを使用し、2つの引数を渡す:タイマーID(任意の数)、およびタイムアウト(ミリ秒)。次に、OnTimerの実装を書き出し、ON_WM_TIMERの中にBEGIN_MESSAGE_MAP...END_MESSAGE_MAPというエントリを書き込みます。

CWnd::SetTimerは3つのパラメータが必要ですが、2つだけ必要です。 3番目の引数をNULLとして渡します。

CWnd::OnTimer

1

あなたはタイマーを使用しての基本的な考え方を取得したい場合は、親切にこのリンクを見ていると、タイマーの操作に関するステップの手順でステップを経ます。この後、必要に応じてアプリケーション内でタイマーを簡単に使用できるようになります。

リンク:このことができますhttp://www.functionx.com/visualc/controls/timer.htm

希望。

乾杯。

1
_AFXWIN_INLINE UINT_PTR CWnd::SetTimer(UINT_PTR nIDEvent, UINT nElapse, 
    void (CALLBACK* lpfnTimer)(HWND, UINT, UINT_PTR, DWORD)) 

あなたは

UINT_PTR myTimer = SetTimer (1, 1000, null); // one event every 1000 ms = 1 s 

ような何かをし、あなたのウィンドウのイベントハンドラでON_TIMERイベントに反応することもできます。

void CMyView::OnTimer (UINT_PTR nIdEvent) 
{ 
if (nIdEvent == 1) 
    // handle timer event 
} 

また、関数の処理へのポインタを渡すことができますタイマーイベント。タイマーのハンドルを保持すると、必要な場合に備えてKillTimer()を使用してオフにすることができます。

関連する問題