当前位置:   article > 正文

Windows高速定时器,多媒体定时器winmm.dll库的使用

c# 使用api winmm.dll 的计时器 对性能的影响

项目里面用到的这些看起来名字高大上的定时器测试下来也是非常不准。看了源码发现也是用System.Timers.Timer或者用的是Thread休眠的方式来实现的。100毫秒就不准了。直到一番搜索,发现利用多媒体定时器winmm.dll的MillisecondTimer是可用的。原文来自博客(dehai)Timer计时不准确的问题及解决方法”。代码如下:

  1. public sealed class MillisecondTimer : IComponent, IDisposable
  2. {
  3. //***************************************************** 字 段 *******************************************************************
  4. private static TimerCaps caps;
  5. private int interval;
  6. private bool isRunning;
  7. private int resolution;
  8. private TimerCallback timerCallback;
  9. private int timerID;
  10. //***************************************************** 属 性 *******************************************************************
  11. /// <summary>
  12. ///
  13. /// </summary>
  14. public int Interval
  15. {
  16. get
  17. {
  18. return this.interval;
  19. }
  20. set
  21. {
  22. if ((value < caps.periodMin) || (value > caps.periodMax))
  23. {
  24. throw new Exception("超出计时范围!");
  25. }
  26. this.interval = value;
  27. }
  28. }
  29. /// <summary>
  30. ///
  31. /// </summary>
  32. public bool IsRunning
  33. {
  34. get
  35. {
  36. return this.isRunning;
  37. }
  38. }
  39. /// <summary>
  40. ///
  41. /// </summary>
  42. public ISite Site
  43. {
  44. set;
  45. get;
  46. }
  47. //***************************************************** 事 件 *******************************************************************
  48. public event EventHandler Disposed; // 这个事件实现了IComponet接口
  49. public event EventHandler Tick;
  50. //*************************************************** 构造函数和释构函数 ******************************************************************
  51. static MillisecondTimer()
  52. {
  53. timeGetDevCaps(ref caps, Marshal.SizeOf(caps));
  54. }
  55. public MillisecondTimer()
  56. {
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/742494
推荐阅读
相关标签
  

闽ICP备14008679号