[MFC]自定义时间间隔Timer

来源:互联网 发布:欧洲看不起美国知乎 编辑:程序博客网 时间:2024/05/01 00:13

Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu  转载请标明来源 

 

需求: 对某项的处理,需要每隔一段时间处理一次。其它时间不处理。

例如: ffmpeg视频播放的时候,25 TPS时,40ms播放一桢。

 

实现: 通过该类,可以设置一个定时器,不停查询时,每n毫秒,返回一次true,用于间隔执行。

例如: ffmpeg视频播放的时候,可以设置这个Timer,每40ms播放一桢。

每毫秒检测一次,从而比较精确的播放每一帧。

 

当然了,也可使用MFC定时器来主动触发,效果类似,但也有些不同,适用于不同的需求场景。

MFC定时器通常用于固定触发,把触发的动作时间排除在外,例如: sleep(n)->执行时间->sleep(n)

而这个CMyTimer的话,把触发动作执行时间排除在外,例如sleep(n)->sleep(n) 和 执行时间无关。

class CMyTimer

{

public:

     // nTimeStep: 执行间隔

     // bIsFirstTimeProc: 第一次是否立刻执行

     CMyTimer(DWORD nTimeStep = 1000, bool bIsFirstTimeProc = true)

     {

         m_timestep = nTimeStep;

         if (!bIsFirstTimeProc)

         {

              m_starttime = timeGetTime();

         }

         else

         {

              m_starttime = 0;

         }

     }

     bool IsTimeToExecute()

     {

         DWORD curTime = timeGetTime();

         if (curTime >= m_starttime + m_timestep)

         {

              m_starttime = curTime;

              return true;

         }

         return false;

     }

private:

     DWORD m_starttime;

     DWORD m_timestep;

};

 

0 0