高性能定时器(转自codeproject)

看了这篇文章,

http://www.codeproject.com/Articles/2635/High-Performance-Timer-in-C

 

很不错的方法,虽然平时很少用到这么精确的定时器,但是这里我产生了一个想法,可以使用这个定时器,

用途:

1、 验证算法(code)执行的效率(时间上)

2、用于某些控制场合,比如需要对精确的时间周期

 

high-performance timer  class:

/// <summary>
    /// A C# class to provide exact time measurement in your applications.
    /// craigtao : 可以用来验证算法的效率如何
    /// </summary>
    internal class HiPerfTimer
    {
        [DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceCounter(
            out long lpPerformanceCount);

        [DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceFrequency(
            out long lpFrequency);

        private long startTime, stopTime;
        private long freq;

        public HiPerfTimer()
        {
            startTime = 0;
            stopTime = 0;

            if (QueryPerformanceFrequency(out freq) == false)
            {
                // high-PerformanceFrequency counter not supported
                throw new Win32Exception();
            }
        }

        //start the timer
        public void Start()
        {
            //lets do the waiting threads there work
            Thread.Sleep(0);

            QueryPerformanceCounter(out startTime);
        }

        //stop the timer
        public void Stop()
        {
            QueryPerformanceCounter(out stopTime);
        }

        //return the dutation of the timer (seconds)
        public double Duration
        {
            get
            {
                return (double)(stopTime - startTime) / (double)freq;
            }
        }
    }

 

测试使用:

class Program
    {
        static void Main(string[] args)
        {
            HiPerfTimer pt = new HiPerfTimer(); // create a new PerfTimer object
            pt.Start();

            //the code time
            Console.WriteLine("Jesus loves you!\n");
            Console.WriteLine("Jesus loves you!, you know? \n");

            pt.Stop();

            Console.WriteLine("Duration:{0} sec\n",
                pt.Duration);

            Console.ReadKey();  // for remain console windows
        }
    }

 

效果:

 

posted @ 2015-06-05 09:17  工控之家-Shrek  阅读(560)  评论(1编辑  收藏  举报