我有一个显示动画 GIF 图像的小应用程序。GIF 帧保存为 HBITMAP。当窗口过程中发生 WM_TIMER 事件时,我只需设置一个计时器并使用 bitblt 函数来执行动画。虽然计时器设置为适当的延迟,但我的 GIF 动画比浏览器中相同文件的动画要慢一些。所以问题是,是否有比使用计时器更好的方法来完成这项工作,或者问题在于代码?
问问题
386 次
1 回答
1
WM_TIMER 的准确性取决于 Windows 时钟中断率和 UI 线程的响应能力。默认情况下,时钟每秒滴答 64 次,每 15.625 毫秒一次。计时器永远不会比这更准确。或者换句话说,如果您要求 10 毫秒,那么在 15.625 毫秒过去之前您不会收到 WM_TIMER 消息。同样,如果您要求 16 毫秒,那么直到 2 x 15.625 = 31.250 毫秒过去后您才会收到消息。
GIF 格式以 10 毫秒为单位指定帧的动画时间。因此,这本身就足以使您的动画花费比预期更长的时间。
您可以通过调用 timeBeginPeriod() 来更改 WM_TIMER 的准确性。要求 10 个期间是合乎逻辑的选择。完成后调用 timeEndPeriod()。
于 2013-10-02T17:13:03.443 回答