• 大小: 14KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: 其他
  • 标签:

资源简介

多媒体定时器的简单使用示例,更精确的定时器使用mmtimer

资源截图

代码片段和文件信息

#include “stdafx.h“

#ifndef __REALTIME

#ifndef _MMTIMER_
#include “MMTimer.h“
#endif

//Allow non MFC asserting
#ifdef _AFX
#define MM_ASSERT ASSERT
#else
#include 
#define MM_ASSERT _ASSERT
#endif

////////////////////////////////////////////////////////////////
//CMultimediaTimer support
////////////////////////////////////////////////////////////////
void CALLBACK mmTimerProc(UINT idUINT msgDWORD dwUserDWORD dw1DWORD dw2)
{
CMultimediaTimer* pTimer = (CMultimediaTimer*)dwUser;
bool bValidTimer=pTimer!=NULL && pTimer->CheckMarker();
MM_ASSERT(bValidTimer);

//Don‘t call callback unless a valid CMultimediaTimer object 
if(bValidTimer)
pTimer->DoLoop();
}

////////////////////////////////////////////////////////////////
// CMultimediaTimer
////////////////////////////////////////////////////////////////
CMultimediaTimer::CMultimediaTimer(CMultimediaTimerCallback& callback) 
:m_Callback(callback)m_Marker(cMMTimerMarker)
m_TimerResolution(0)m_TimerPeriod(0)m_TimerId(0)m_EndTimer(false)
{
}

///////////////////////////////////////////////////////////////////////////////////
//
CMultimediaTimer::~CMultimediaTimer()
{
Stop();
m_Marker=0;//invalidate marker
}

///////////////////////////////////////////////////////////////////////////////////
//
void CMultimediaTimer::DoLoop()
{
if(m_EndTimer)//Previous loop marked as ending
{
Stop();//Try to stop
}

// Check Active() is true - before calling Loop()
// This may be false if the overridden onstarted() takes longer than 1 period
// and onstarted() must complete before first loop call.
//
if(!m_EndTimer && Active())
{
m_EndTimer=!m_Callback.OnLoop();
}
}

///////////////////////////////////////////////////////////////////////////////////
//
bool CMultimediaTimer::CheckMarker()const
{
return m_Marker==cMMTimerMarker;
}

////////////////////////////////////////////////////////////////
//
bool CMultimediaTimer::Start(UINT nPeriodMsMMRESULT& nErrorUINT nResolutionMs)
{
nError=TIMERR_NOERROR;

//1. Clean up any current timer
Stop();

//2 Get available timer resolution
TIMECAPS tc;
MMRESULT result=::timeGetDevCaps(&tcsizeof(TIMECAPS));
if(result!=TIMERR_NOERROR)
{
nError=result;//Should be TIMERR_STRUCT
return false;
}
MM_ASSERT(nPeriodMs>=tc.wPeriodMin && nPeriodMs<=tc.wPeriodMax);
MM_ASSERT(nResolutionMs>=tc.wPeriodMin && nResolutionMs<=tc.wPeriodMax);

//Clip required resolution to available resolution
m_TimerResolution=min(max(tc.wPeriodMinnResolutionMs)tc.wPeriodMax);

//Set global min resolution value
result=::timeBeginPeriod(m_TimerResolution);
if(result!=TIMERR_NOERROR)
{
m_TimerResolution=0;
nError=result;//Should be TIMERR_NOCANDO
return false;
}

//Clip required period to available resolution
m_TimerPeriod=min(max(tc.wPeriodMinnPeriodMs)tc.wPeriodMax);

//Set event callback passing this as user dat

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2002-03-28 13:41  MMTimerTest\
     文件        1973  2002-03-28 11:06  MMTimerTest\FLCriticalSection.h
     文件        4382  2002-03-28 11:15  MMTimerTest\MMTimer.cpp
     文件        3678  2002-03-28 13:40  MMTimerTest\MMTimer.h
     文件        1303  2002-03-28 13:40  MMTimerTest\MMTimerTest.clw
     文件        1325  2002-03-28 10:52  MMTimerTest\MMTimerTest.cpp
     文件        4360  2002-03-28 11:08  MMTimerTest\MMTimerTest.dsp
     文件         545  2002-03-28 10:52  MMTimerTest\MMTimerTest.dsw
     文件        1237  2002-03-28 10:52  MMTimerTest\MMTimerTest.h
     文件        5539  2002-03-28 11:01  MMTimerTest\MMTimerTest.rc
     文件        3991  2002-03-28 11:31  MMTimerTest\MMTimerTestDlg.cpp
     文件        3594  2002-03-28 12:46  MMTimerTest\MMTimerTestDlg.h
     目录           0  2002-03-28 10:52  MMTimerTest\res\
     文件        1078  2002-03-28 10:52  MMTimerTest\res\MMTimerTest.ico
     文件         403  2002-03-28 10:52  MMTimerTest\res\MMTimerTest.rc2
     文件        1057  2002-03-28 11:01  MMTimerTest\resource.h
     文件         213  2002-03-28 10:52  MMTimerTest\StdAfx.cpp
     文件         999  2002-03-28 10:52  MMTimerTest\StdAfx.h

评论

共有 条评论

相关资源