📄 timer6说明.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 + -