【问题标题】:What periodic timer objects are available in the Windows API?Windows API 中提供了哪些定期计时器对象?
【发布时间】:2010-10-23 00:12:55
【问题描述】:

在研究获得优于 .NET 计时器对象提供的 15 毫秒分辨率的选项时(请参阅 https://stackoverflow.com/questions/3744032/why-are-net-timers-limited-to-15-ms-resolution),我正在研究 Windows 提供的不同计时器对象。我已经确定了以下内容:

Windows API 中是否还有其他可用的计时器类型?

【问题讨论】:

    标签: winapi timer


    【解决方案1】:

    我问这个问题是因为我有兴趣实现一个周期性计时器,它可以比 .NET 提供的计时器提供更好的粒度。我对这些计时器(Windows.Forms.TimerSystem.Timers.TimerSystem.Threading.Timer)的调查表明,我能期望的最佳值是 15 毫秒的粒度,以及 -1 到 +30 毫秒的精度。这对于大多数应用程序来说都很好,但对于我正在处理的应用程序来说却不是。

    有关我的调查的详细信息,请参阅Why are .NET timers limited to 15 ms resolution?http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=815

    这导致我寻找 Windows 下可用的周期性计时器对象。我确定了我在原始问题中发布的五种类型。我没有找到其他人。我放弃了旧式 Windows 计时器,因为我不想处理消息。然后,我用 C# 为其他四种计时器类型编写了托管原型并进行了一些测试。

    所有四种定时器类型(多媒体定时器、等待定时器、定时器队列定时器和线程池定时器)都提供了可靠的 1 毫秒间隔,具有非常好的分辨率。其中,Threadpool 计时器是迄今为止最容易与之交互的,但不幸的是它在 Windows XP 上不受支持。定时器队列定时器有一系列令人眼花缭乱的选项,但如果你忽略大多数选项,它们几乎和线程池定时器一样简单。请参阅Exploring options for better timers 了解更多信息。

    我选择在 .NET 中为我的通用计时器类包装计时器队列计时器。你可以看到它here

    您可能还对Waitable Timers in .NET with C# 感兴趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 2012-03-25
      相关资源
      最近更新 更多