timer触发间隔设为50ms触发一次,但实际的触发为47ms,那下一次触发就应该是53ms后…… 现在我遇到的问题时怎么判断实际触发间隔?
问题补充:
多媒体计时器
/// MMRESULT timeSetEvent( UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, WORD dwUser, UINT fuEvent )该函数设置一个定时回调事件,此事件可以是一个一次性事件或周期性事件。事件一旦被激活,便调用指定的回调函数,成功后返回事件的标识符代码,否则返回NULL。函数的参数说明如下:uDelay:以毫秒指定事件的周期。Uresolution:以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms。LpTimeProc:指向一个回调函数。DwUser:存放用户提供的回调数据。FuEvent:指定定时器事件类型:TIME_ONESHOT:uDelay毫秒后只产生一次事件TIME_PERIODIC :每隔uDelay毫秒周期性地产生事件。
/// 具体应用时,可以通过调用timeSetEvent()函数,将需要周期性执行的任务定义在LpTimeProc回调函数中(如:定时采样、控制等),从而完成所需处理的事件。需要注意的是,任务处理的时间不能大于周期间隔时间。另外,在定时器使用完毕后,应及时调用timeKillEvent()将之释放
/// </summary>
public sealed class Timer : IComponent
{
private delegate void TimeProc(int id, int msg, int user, int param1, int param2);
private delegate void EventRaiser(EventArgs e);
[DllImport("winmm.dll")]
private static extern int timeGetDevCaps(ref TimerCaps caps,
int sizeOfTimerCaps);
[DllImport("winmm.dll")]
private static extern int timeSetEvent(int delay,
int resolution,
TimeProc proc,
int user,
int mode);
[DllImport("winmm.dll")]
private static extern int timeKillEvent(int id);
private const int TIMERR_NOERROR = 0;
private int timerID;
private volatile Mode mode;
public bool Enable = false;
private volatile int period;//以毫秒指定事件的周期
private volatile int resolution; //以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms。
private TimeProc timeProcPeriodic;
private TimeProc timeProcOneShot;
private EventRaiser tickRaiser;
private bool running = false;
private volatile bool disposed = false;
private IS
Bin仔
|
初学一级
|
园豆:
185
提问于:2010-01-28 09:56