2010-09-21 58 views
4

在研究获得比由.NET定时器对象提供的15毫秒分辨率更好的选项(请参阅https://stackoverflow.com/questions/3744032/why-are-net-timers-limited-to-15-ms-resolution)时,我正在查看Windows提供的不同计时器对象。我已经确定了以下情况:Windows API中有哪些定期计时器对象可用?

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

回答

8

我问这个问题,因为我很感兴趣,执行周期定时器,这将使我更好的粒度比与.NET提供的定时器。我的这些定时器(Windows.Forms.TimerSystem.Timers.TimerSystem.Threading.Timer)的调查显示,我希望最好是15毫秒的粒度,以及-1至+30 ms的精度。这对大多数应用程序来说都很好,但对于我正在开发的应用程序而言并非如此

对于我调查的详情,请参阅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上不受支持。定时器队列定时器有一组令人眼花缭乱的选项,但是如果你忽略了大部分选项,它们几乎和Threadpool定时器一样简单。有关更多信息,请参阅Exploring options for better timers

我选择包计时器队列计时器在.NET我的普通定时器类。你可以看到它here

您可能也有兴趣Waitable Timers in .NET with C#