Delphi计时器比毫秒更精确

时间:2015-01-16 08:07:44

标签: windows delphi winapi timer

我在Delphi中有一个程序,它以25赫兹(每秒25次)从外部应用程序中获取帧,然后通过创建1-2个额外帧将其转换为60赫兹(每秒60帧) 。我需要通过连续构建一个帧缓冲区并从一个单独的线程输出这里的帧来输出这些额外的帧。问题是1000/60是16.66667,这意味着我不能在"间隔"中发送帧。在16或17毫秒,我需要它更精确。我如何在Delphi / Windows中执行此操作?

2 个答案:

答案 0 :(得分:2)

您可能需要使用以下两种方法:

  1. 高分辨率计时器。这可以通过QueryPerformanceCounter Win32函数获得,也可以用Delphi TStopwatch类型包装。
  2. A waitable timer。这允许您在将来设置截止日期并让您的线程阻止,并在截止日期被唤醒。
  3. 这两者都具有比GUI计时器更高的分辨率,并且应该满足您的需求。在此处阅读概述:http://msdn.microsoft.com/en-gb/library/windows/desktop/ms644900.aspx

答案 1 :(得分:1)

通过Win32 API multimedia timertimeSetEvent()功能使用CreateTimerQueueTimer()