SetTimer定时的分辨率最小到50ms,在需要更小的定时间隔时他就无能为力了,多媒体定时器在精确定实时中很有用处,能够定时到一毫秒,不过得到这样的好处是要付出代价的,使用起来略嫌麻烦,下面1-6步就是使用方法,不对之处请指正。
原来写时使用了使用了英文注释,比较简单就不改了。
1.Link winmm.lib
#i nclude <mmsystem.h>
#pragma comment(lib, "winmm.lib")
2.Define variables
#define TARGET_RESOLUTION 1 // 1-millisecond target resolution
int wTimerID; // store timer ID
int msInterval; // delay
UINT wTimerRes; // end resolution
3.Obtaining and setting timer resolution
//Obtaining timer resolution
TIMECAPS tc;
if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR)
{
MessageBox("Obtaining timer resolution error");
return;
}
wTimerRes = min(max(tc.wPeriodMin, TARGET_RESOLUTION), tc.wPeriodMax);
//setting timer resolution
timeBeginPeriod(wTimerRes);
4.Starting a Single/Periodic Timer Event
wTimerID=timeSetEvent(
msInterval, // delay
wTimerRes, // resolution
MMTimerProc, // callback function
(DWORD)UserData,// User Data, it is sent to dwUser of the callback function //parameter
TIME_PERIODIC // TIME_PERIODIC or TIME_ONESHOT
);
5.Writing a Timer Callback Function
void CALLBACK MMTimerProc(UINT wTimerID, UINT msg,
DWORD dwUser, DWORD dw1, DWORD dw2)
{
//timer routine
}
6.Canceling a Timer Event
if(wTimerID) // is timer event pending?
{
timeKillEvent(npSeq->wTimerID); // cancel the event
wTimerID = 0;
}
7.Error Shoting
1.DWORD dwUserData = (DWORD)this; //UserData
//if it is used in global area will get the following error
error C2355: 'this' : can only be referenced inside non-static member functions
2. int msInterval;
msInterval = 1;
//if it is used in global area will get the following error
error C2501: 'msInterval' : missing storage-class or type specifiers
error C2374: 'msInterval' : redefinition; multiple initialization
8.Unserstanding Difficult Points
1. wTimerRes = min(max(tc.wPeriodMin, TARGET_RESOLUTION), tc.wPeriodMax);
分享到:
相关推荐
vs2019 MFC 多媒体定时器 ms级定时器
这个例子使用了多媒体定时器,并且在界面上面显示多媒体定时器和普通定时器的效果对比,最后显示在毫秒级别的任务,多媒体定时器任务比普通定时器精度更高;
使用多媒体定时器创建多个线程周期性的工作,线程工作可完全由“类”描述。
vc 定时器 Timer 多媒体定时器 毫秒 ms
windows 高精度多媒体定时器,支持毫秒精确定时
MmTimer 是一个多媒体定时器的C#简单封装。 使用这个定时器,你可以得到1ms精度的单次延时或周期定时。最初是想用来做播放midi文件的时钟,当然你也可以用它来做任何它能做到的事情。
VB多媒体定时器实验 ,巩固对定时器的理解
C#调用采用C++/CLR封装的多媒体定时器的例子及封装库文件。可用Winform和WPF程序中。经过测试可用。
一个使用多媒体定时器的例子.一个使用多媒体定时器的例子.
多媒体定时器的简单使用示例,更精确的定时器使用mmtimer
非常简单、易学的多媒体定时器应用,适合初学者,一看就明白
多媒体定时器
使用方法 (1) 添加dll文件到项目中 (2) 使用命名空间 using Dongzr.MidiLite; (3) 定义 EventHandler. void timer1_Tick(object sender, EventArgs e) { //.......................... } (4) 定义计时器 static ...
利用VC多媒体定时器编写的定时器小程序,可供用VC进行精确定时或者定时控制,实时控制的编程参考。内附详细的过程说明
使用VC6.0开发的高精度多媒体定时器,这里创建了多个定时器。并控制对话框资源。
MFC定时器的使用MFC定时器的使用MFC定时器的使用MFC定时器的使用MFC定时器的使用MFC定时器的使用MFC定时器的使用
Qt多媒体定时器的用法,可用于windous操作系统下对实时性要求相对较高的工程
可以实现精确定时一毫秒的多媒体定时器,采用windows环境下的编程。有钟表界面。
比Timer定时器的精度更高的定时器,做实时控制经常使用的控制器