第一次提问,高手们多多指教!
我在做关于图片全屏显示的控制,要求是按时显示,定时器我用的是OnTimer,由于控制的需要,我用了多个定时器,启动第一个,时间到后,关闭第一个,显示图片,再进行相关的动作,再开启第二个定时器,如此循环。显示图片时我参阅了网上关于双缓存的方法,但不是GDI(+),直接用BitBlt,运行过程中,发现有时候图片显示比如设定5s,就是5s,有时候则会一闪而过,时间不到1s!过下就会正常!我用GetTickCount记录下每次定时从显示图片开始,到更换另一张图片之间的时间差,当问题发生时,我停止程序,发现记录正确,似乎不是定时器的问题!
希望高手们帮忙看看,感觉特奇怪!
我在做关于图片全屏显示的控制,要求是按时显示,定时器我用的是OnTimer,由于控制的需要,我用了多个定时器,启动第一个,时间到后,关闭第一个,显示图片,再进行相关的动作,再开启第二个定时器,如此循环。显示图片时我参阅了网上关于双缓存的方法,但不是GDI(+),直接用BitBlt,运行过程中,发现有时候图片显示比如设定5s,就是5s,有时候则会一闪而过,时间不到1s!过下就会正常!我用GetTickCount记录下每次定时从显示图片开始,到更换另一张图片之间的时间差,当问题发生时,我停止程序,发现记录正确,似乎不是定时器的问题!
希望高手们帮忙看看,感觉特奇怪!
在加上这样不停的停止、启动,更加不准了。
精确定时推荐使用多媒体定时器:具体函数是timeSetEvent
The timeSetEvent function starts a specified timer event. The multimedia timer runs in its own thread. After the event is activated, it calls the specified callback function or sets or pulses the specified event object.MMRESULT timeSetEvent(
UINT uDelay,
UINT uResolution,
LPTIMECALLBACK lpTimeProc,
DWORD_PTR dwUser,
UINT fuEvent
);
注意尽量以回调函数的方式处理;如果要求再苛刻些,可以考虑自己定义Thread,通过监视系统时钟的方式定时,只是这样系统资源,尤其CPU资源浪费严重;
首先对于liyinlei的提问,这里只能用控制需要,中间需要不同的时间来进行控制,确实比较麻烦!
各位说的都很对,对于屏幕闪烁的问题,我确实很苦恼!我一再试验,发现总是到做到大约20分钟时就会出现,定时不准的情况,就像机器反应不过来,几张图片一闪而过后,就又会恢复正常!本人是小菜鸟,刚学不久,线程啊,看了很多东西,也一直不敢下手,有问题再向各位请教!
特别感谢tomsoft,说得很详细,而我的分也不多,让你还如此费心!不胜感激!