マルチメディアタイマーの使用方法
お世話になります、fujitomoです。
今回お聞きしたいのはマルチメディアタイマーのプログラムの使用方法についてです。現在下記のようなコードを作成して、マルチメディアタイマーを動作させたいと思っていますが、なぜか処理が固まってしまいます。
プログラムはVisual Studio2005のVisual C++のダイアログベースのプログラムで、CStatic派生クラスをメインダイアログクラスにてサブクラス化した際の動作を示しています。
//CStatic派生のクラスCSampleクラスのヘッダーファイル
//CSample.h
class CSample : public CStatic
{
static void CALLBACK TimerProc(UINT uTimerID,UINT uMsg,DWORD dwUser,DWORD dw1,DWORD dw2);
static UINT TimerID;
}
//CSample.cpp
void CSample::PreSubclassWindow()
{
TIMECAPS timercaps;
MMRESULT mmresult;
//分解能を取得
mmresult = timeGetDevCaps(&timercaps,sizeof(TIMECAPS));
if(mmresult != TIMERR_NOERROR){
AfxMessageBox(_T("分解能取得失敗"));
return;
}
else
period = timercaps.wPeriodMin;
//最小タイマー分解能の設定
mmresult = timeBeginPeriod(period);
if(mmresult != TIMERR_NOERROR){
AfxMessageBox(_T("分解能設定失敗"));
return;
}
//タイマー処理の呼び出しの設定と開始
mmresult = ::timeSetEvent(500,period,TimerProc,0,TIME_PERIODIC|TIME_CALLBACK_FUNCTION);
if(mmresult == NULL){
AfxMessageBox(_T("タイマー処理失敗"));
return;
}
else TimerID = (UINT)mmresult;
}
void CALLBACK CSample::TimeProc(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
if(uTimerID == TimerID){
;
}
}
というコードです。自分の予想ではTimerProcにブレークポイントを置いて、デバックを開始すると500msecでTimerProcにとぶと思っているのですが、実際はtimeSetEvent()を呼び出した後にプログラムの動作が止まってしまいます。
これは何が原因なのかわかりますでしょうか?
timesetEvent()を使用するのが初めてで、なかなか使い方が分からず初歩的な質問なのかもしれませんが、どうかご意見を宜しくお願い致します。
尚、開発環境は
Visual Studio 2005
Windows CE 6.0
です。宜しくお願い致します。