关于多媒体定时器
我在网上找到了一个网友写的一个多媒体定时器的类,比较简单,基本上就有两个方法:
BOOL CTimeSet::Start(UINT delay,LPTIMECALLBACK pfun,DWORD dwUser, UINT res/*=1*/)
{
Stop();
TimerRes = res; //分辨率
TimerDelay = delay; //延时时间,单位是毫秒
TimerID = timeSetEvent(TimerDelay,TimerRes,pfun,dwUser,TIME_PERIODIC | TIME_KILL_SYNCHRONOUS );//TIME_PERIODIC); //TimerID是定时器的ID,pfun是回调函数
if(TimerID)
return TRUE;
else
return FALSE;
}
void CTimeSet::Stop()
{
if(TimerID)
timeKillEvent(TimerID);
TimerID=0;
}
我在我的程序中定义了一个CTimeSet的对象,然后调用Start设置了每10ms发一个消息。在回调函数中,主要是一些绘图的操作和读数据库的操作(我测试过,这些操作正常情况下仅需4-6ms就可以完成)。当关闭程序时,我就调用Stop关闭定时器。
现在开始说问题了:
1.有时候我关闭程序后,虽然界面消失了,但是在任务管理器那里一看,程序的进程还没结束,我检查了很久也不知道为什么,怀疑是可能关闭程序的时候定时器没有关闭成功,所以进程不能正常结束。
2.由于我的程序要求每10ms要对硬件进行一次操作,并将数据画成曲线显示出来(目前还是用到硬件,仅在电脑上仿真),但是程序运行的时候有时会稍微卡一下(就是正常情况下曲线是匀速地画出来的,但是有时候会稍微停滞一小会然后再加速画出来,最后再变正常速度),请问这是为什么呢?是因为线程的优先级别问题吗?怎么解决呢?