zoukankan      html  css  js  c++  java
  • Timer计时不准确的解决方案 每次都重新调整,修正误差

    http://stackoverflow.com/questions/29722838/system-timers-timer-steadily-increasing-the-interval

    需要在计时器每次运行后,修正计时器的间隔

    通过DateTime的Tick来处理     不过这个修正貌似有点不准

    public class Meter
        {
            private Timer ReadingTime;
            private DateTime NextTickTimeWholeSeconds;
    
            public Meter()
            {
                DateTime now = DateTime.Now;
                NextTickTimeWholeSeconds = new DateTime(now.Ticks - (now.Ticks % TimeSpan.TicksPerSecond), now.Kind);
    
                ReadingTime = new Timer();
                ReadingTime.Elapsed += new ElapsedEventHandler(PerformReading);
                ReadingTime.Interval = GetTimeToNextSecond();
            }
    
            public void StartMeter()
            {
                ReadingTime.Start();
            }
    
            public void StopMeter()
            {
                ReadingTime.Stop();
            }
    
            private double GetTimeToNextSecond()
            {
                NextTickTimeWholeSeconds = NextTickTimeWholeSeconds.AddSeconds(1);
                var interval = NextTickTimeWholeSeconds - DateTime.Now;
                return interval.Milliseconds < 1 ? GetTimeToNextSecond() : interval.Milliseconds;
            }
    
            /// <summary>
            /// 定时处理
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void PerformReading(object sender, ElapsedEventArgs e)
            {
                Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                //Console.WriteLine("Performing reading: " + DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second + "." + DateTime.Now.Millisecond);
                ReadingTime.Interval = GetTimeToNextSecond();
            }
        }

     

    C# + high resolution timer

    I found a solution to this problem in the following blog:http://web.archive.org/web/20110910100053/http://www.indigo79.net/archives/27#comment-255

    It tells you how to use the multimedia timer to have a timer with high frequency. It is working just fine for me!!!

    上面的链接无效,在评论中找到这个http://svn.the-starport.net/utfeditor/UTFEditor/MultimediaTimer.cs

    主要是通过调用winmm.dll来计时

  • 相关阅读:
    oracle 体系结构 基本表空间介绍
    在用tiles框架的时候现了这样的错误
    java test 1
    SQL 日期函数小总结
    JavaEE 多层模型
    用 java 将文件的编码从GBK 转换成 UTF8收藏
    详解Java日期格式化及其使用例子
    java md5编码
    Tiles框架使用总结
    字符串分组求和收藏
  • 原文地址:https://www.cnblogs.com/chucklu/p/4673600.html
Copyright © 2011-2022 走看看