代码之家  ›  专栏  ›  技术社区  ›  geofftnz

.net中的精确计时

  •  10
  • geofftnz  · 技术社区  · 16 年前

    我刚刚看到 this question ,其中一个答案表明 System.Diagnostics.Stopwatch 应仅用于诊断性能,而不是在生产代码中。

    在这种情况下,在.net中获得精确计时的最佳方法是什么?我目前正处于建立一个非常简单的 MIDI 使用midi out功能的Sequencer NAudio . 我希望能够发送的MIDI信息与(比如)1/10秒对齐,抖动尽可能小。这是可行的,还是像语境转换这样的事情会毁了我的一天?

    我目前在一个控制台应用程序中有一些代码,可以连续调用 Stopwatch 并计算在150 bpm时生成1/16音符流时的抖动。在这种情况下,抖动非常低。不过,我会把这个转移到另一个线程,所以我不知道是否会继续这样。

    3 回复  |  直到 16 年前
        1
  •  6
  •   RichieHindle    16 年前

    如果不介意p/invoke,可以使用queryperformancecounter: http://www.eggheadcafe.com/articles/20021111.asp

        2
  •  1
  •   obiwanjacobi    15 年前

    您还可以使用本机流媒体midi api。我不认为它在naudio,但你可以看看c midi工具包,看看它是否支持它。否则,您有两个如何进行本机midi api p/invoke的示例,并且可以滚动您自己的…

        3
  •  0
  •   Spike    10 年前

    Windows multimedia timer 声明它允许“应用程序以尽可能高的分辨率(或精度)为硬件平台安排计时器事件”。

    它用作示例的应用程序是MIDI Sequencer。