⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer6说明.txt

📁 VC中基于 Windows 的精确定时
💻 TXT
字号:
1:将Winmm.lib和Mmsystem.h添加到工程中;

2:在头文件中定义延迟时间时钟间隔和时钟分辨率,如下:
   //定义1ms时钟间隔,以ms为单位 
   # define ONE_MILLI_SECOND 1  
   //定义时钟分辨率,以ms为单位 
   # define TIMER_ACCURACY 1 

3: 在*.cpp文件中定义全局变量
  UINT wTimerRes_1ms;//定义时间间隔
  UINT wAccuracy;//定义分辨率 
  UINT TimerID_1ms,TimerID1_1ms;//定义定时器句柄 
4:在*.cpp文件的构造函数中初始化全局变量,并设置定时器的分辨率:

       wTimerRes_1ms=ONE_MILLI_SECOND;// 给时间间隔变量赋值 
	TIMECAPS tc;
	//利用函数timeGetDevCaps取出系统分辨率的取值范围,如果无错则继续 
	if(timeGetDevCaps(&tc,sizeof(TIMECAPS))==TIMERR_NOERROR) 	
	{ 
		// 分辨率的值不能超出系统的取值范围 
		wAccuracy=min(max(tc.wPeriodMin,TIMER_ACCURACY),tc.wPeriodMax);
		//调用timeBeginPeriod函数设置定时器的分辨率 
		timeBeginPeriod(wAccuracy); 
	} 
  5:在在*.cpp文件的析构函数中删除定时器:
  CMulti_TimerDlg::~CMulti_TimerDlg()
  {
	timeKillEvent(TimerID_1ms);
	timeEndPeriod(wAccuracy);
  }
  6:定义定时器的回调函数,类似于中断处理程序,一定要声明为全局PASCAL函数,否则编译会有问题 
    void PASCAL OneMilliSecondProc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2); 
         //声明回调函数
     void PASCAL OneMilliSecondProc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2) 
    {
	CMulti_TimerDlg *timer =(CMulti_TimerDlg *)dwUser;
        timer->SendMessage(WM_UPDATETIME4,0,0);
        //timeKillEvent(TimerID_1ms); 
        //AfxMessageBox("在此回调函数中安排需要执行的任务");
     }
   7:添加自定义定时器定时到的相关处理消息即程序,向timer3中第2点一样:

   #define WM_UPDATETIME4	WM_USER+1003
   
    void OnUpdateTime4();
    ON_MESSAGE(WM_UPDATETIME4,OnUpdateTime4)

    void CMulti_TimerDlg::OnUpdateTime4()
   {
	struct _timeb timebuffer;
	char *timeline;
	//获得毫秒级的时间
	_ftime( &timebuffer );
	timeline = ctime(&(timebuffer.time));
	//格式化时间
	CString m_Str;
	m_Str.Format("%.19s.%hu %s", timeline, timebuffer.millitm, &timeline[20]);
	SetDlgItemText(IDC_EDIT5,m_Str);
   }
  8:启动多媒体定时器:
     
   void CMulti_TimerDlg::OnButtonTime6() 
  {
	TimerID_1ms = timeSetEvent(wTimerRes_1ms, wAccuracy,
		(LPTIMECALLBACK) OneMilliSecondProc,
		(DWORD)this,TIME_ONESHOT);
  }


   

  void CMulti_TimerDlg::OnButtonTime61() 
 {
	TimerID1_1ms = timeSetEvent(wTimerRes_1ms, wAccuracy,
		(LPTIMECALLBACK) OneMilliSecondProc1,
		(DWORD)this,TIME_PERIODIC);
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -