C++タイマー使用
3077 ワード
WMでタイマーを設定するTIMER
まずSetTimerというAPI関数のプロトタイプを見てください
たとえば
SetTimer(m_hWnd,1,1000,NULL);//1秒に1回トリガするタイマー
MFCプログラムでは、CWndクラスにSetTimerがカプセル化されており、呼び出しはウィンドウハンドルを指定する必要はありません.たとえば、次のようになります.
UINT SetTimer(1,100,NULL);
最初のパラメータ値1は、このタイマのID番号を表します.
2番目のパラメータは、100ミリ秒の時間を待ってから再起動することを示します.
しょり
一度.3番目のパラメータは
方法
の場合はNULLが一般的です.
注意:2番目のパラメータを設定するときは、設定した待機時間が処理時間より短い場合、プログラムに問題が発生することに注意してください.
コールバック関数の呼び出し
このメソッドは、まず次のフォーマットのコールバック関数を書きます.
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
その後、SetTimer(1100,TimerProc)関数を使用してタイマを構築し、3番目のパラメータがコールバック関数アドレスである.
複数のタイマの実装と応用
我々はタイマーを取り付ける際にIDを指定し,複数のタイマーを使用するとそのIDが機能する.
MFCを使用しない場合、WM_を受信するTIMERメッセージは、WPARAM wParamの値がタイマのIDである.
MFCを使うともっと簡単になりますが、WM_を増やします.TIMEのメッセージ処理関数OnTimerで良いので、以下の例を見てください
コールバック関数を使用すると、nTimeridの値に基づいて、次のようなタイマを判断できます.
タイマーのキャンセル
タイマーを使用しなくなったら、KillTimerを呼び出してタイミングをキャンセルすべきです.KillTimerのプロトタイプは次の通りです.
MFCプログラムでは、タイマーをキャンセルするためにKillTimer(int nIDEvent)を直接呼び出すことができます.
例は次のとおりです.
まずSetTimerというAPI関数のプロトタイプを見てください
UINT_PTR SetTimer(
HWND hWnd, //
UINT_PTR nIDEvent, // ID, , ID
UINT uElapse, // ,
TIMERPROC lpTimerFunc //
);
たとえば
SetTimer(m_hWnd,1,1000,NULL);//1秒に1回トリガするタイマー
MFCプログラムでは、CWndクラスにSetTimerがカプセル化されており、呼び出しはウィンドウハンドルを指定する必要はありません.たとえば、次のようになります.
UINT SetTimer(1,100,NULL);
最初のパラメータ値1は、このタイマのID番号を表します.
2番目のパラメータは、100ミリ秒の時間を待ってから再起動することを示します.
しょり
一度.3番目のパラメータは
方法
の場合はNULLが一般的です.
注意:2番目のパラメータを設定するときは、設定した待機時間が処理時間より短い場合、プログラムに問題が発生することに注意してください.
コールバック関数の呼び出し
このメソッドは、まず次のフォーマットのコールバック関数を書きます.
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
その後、SetTimer(1100,TimerProc)関数を使用してタイマを構築し、3番目のパラメータがコールバック関数アドレスである.
複数のタイマの実装と応用
我々はタイマーを取り付ける際にIDを指定し,複数のタイマーを使用するとそのIDが機能する.
MFCを使用しない場合、WM_を受信するTIMERメッセージは、WPARAM wParamの値がタイマのIDである.
MFCを使うともっと簡単になりますが、WM_を増やします.TIMEのメッセージ処理関数OnTimerで良いので、以下の例を見てください
void CTimerTestDlg::OnTimer(UINT nIDEvent)
{
switch(nIDEvent)
{
case 24: /// ID 24
Draw1();
break;
case 25: /// ID 25
Draw2();
break;
}
CDialog::OnTimer(nIDEvent);
}
コールバック関数を使用すると、nTimeridの値に基づいて、次のようなタイマを判断できます.
void CALLBACK TimerProc(HWND hWnd
, UINT nMsg
, UINT nTimerid
, DWORD dwTime)
{
switch(nTimerid)
{
case 1: /// ID 1
Do1();
break;
case 2: /// ID 2
Do2();
break;
}
}
タイマーのキャンセル
タイマーを使用しなくなったら、KillTimerを呼び出してタイミングをキャンセルすべきです.KillTimerのプロトタイプは次の通りです.
BOOL KillTimer(
HWND hWnd, //
UINT_PTR uIDEvent // ID
);
MFCプログラムでは、タイマーをキャンセルするためにKillTimer(int nIDEvent)を直接呼び出すことができます.
例は次のとおりです.
#include <windows.h>
#include <iostream>
#include <time.h>
VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
time_t now_time;
now_time = time(NULL);
struct tm *tblock;
tblock = localtime(&now_time);
printf("Local time is: %s",asctime(tblock));
}
void main()
{
int timer1 = 100;
HWND hwndTimer;
MSG msg;
SetTimer(NULL,timer1,5000,TimerProc);
int itemp;
while ( (itemp = GetMessage(&msg, NULL,NULL,NULL))&& (itemp!=0) && (-1 != itemp))
{
if (msg.message == WM_TIMER)
{
printf("I got the message.
");
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
から:http://blog.163.com/linzuxin@126/blog/static/340740572008101311552948/(原作者に敬意を表します)