在研究获得比.NET计时器对象提供的15 ms分辨率更好的选项时(参见https://stackoverflow.com/questions/3744032/why-are-net-timers-limited-to-15-ms-resolution),我正在研究Windows提供的不同计时器对象。我已经确定了以下内容:
Windows API中是否还有其他计时器类型?
答案 0 :(得分:7)
我问了这个问题,因为我对实现一个周期性计时器感兴趣,这个计时器比.NET提供的计时器更精细。我对这些计时器(Windows.Forms.Timer
,System.Timers.Timer
和System.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#中为其他四种计时器类型编写了托管原型并进行了一些测试。
所有四种定时器类型(多媒体定时器,等待定时器,定时器队列定时器和Threadpool定时器)提供可靠的1 ms间隔,具有非常好的分辨率。其中,Threadpool计时器是最容易与之交互的计时器,但遗憾的是它在Windows XP上不受支持。定时器队列定时器有一系列令人眼花缭乱的选项,但如果忽略大多数选项,它们几乎就像Threadpool定时器一样简单。有关详细信息,请参阅Exploring options for better timers。
我选择在.NET中为我的通用计时器类包装计时器队列计时器。你可以看到它here。
您可能也对Waitable Timers in .NET with C#感兴趣。