【问题标题】:`Timer` Component not accurate enough, is there an alternative?`Timer` 组件不够准确,有替代方案吗?
【发布时间】:2012-05-15 17:10:30
【问题描述】:

我需要每 0.03125 秒发生一次事件 Timer控件只能到0.031秒

如何从Stopwatch 组件创建更准确的事件?

【问题讨论】:

  • 你想做什么?这在 Windows 上通常是不可能的...
  • 我有一个媒体播放器,播放时必须准确滚动。播放的某些节奏意味着我必须以 0.03125 秒等间隔滚动以保持同步

标签: c# winforms visual-studio-2008


【解决方案1】:

我发现了这个,它比标准计时器准确可靠得多!我不敢相信。

http://www.codeproject.com/Articles/5501/The-Multimedia-Timer-for-the-NET-Framework

引用: Win32 多媒体计时器服务提供最大程度的计时准确性。它们允许您以比其他计时器服务更高的分辨率安排计时事件。这在计时精度至关重要的多媒体应用中非常有用。例如,MIDI 应用程序需要尽可能细粒度的计时事件。

不幸的是,Win32 多媒体计时器不是 .NET Framework 的一部分。但是,通过使用 .NET 互操作性服务,可以将多媒体计时器纳入 .NET 范畴。

【讨论】:

    【解决方案2】:

    Windows 不是实时操作系统 - 因此您无法保证在特定时间后执行方法。

    您能做的最好的事情就是经常忙着等待检查时间(可能使用秒表)。

    您还可以使用分辨率更高的多媒体计时器...(搜索查询 - c# multimedia timers,即Getting accurate ticks from a timer in C#

    【讨论】:

      【解决方案3】:

      一般来说,定时器的精度只能在 15 毫秒左右,即使这样,也往往会出现精度问题,因为它们通常会被抢占。

      拥有一个精度在四分之一毫秒范围内的计时器将需要一个实时操作系统,并且无论使用哪个计时器都可能无法正常工作。

      【讨论】:

        【解决方案4】:

        “我需要每 0.03125 秒发生一次事件”——要可靠地达到这样的精度,请使用专用的微控制器。

        您无法在桌面操作系统上实现您似乎需要的功能。

        【讨论】:

        • 但可以达到 30 毫秒的周期
        【解决方案5】:

        使用 chek 秒表时间或更精确的计数器的高优先级线程和循环怎么样?

        【讨论】:

          猜你喜欢
          • 2014-09-27
          • 1970-01-01
          • 1970-01-01
          • 2012-05-29
          • 2021-12-03
          • 2019-07-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多