C# 精准计时之 QueryPerformanceCounter QueryPerformanceFrequency用法

C# 用法:

    public static class QueryPerformanceMethd
    {
        [DllImport("kernel32.dll")]
      public  extern static short QueryPerformanceCounter(ref long x);


        [DllImport("kernel32.dll")]
        public extern static short QueryPerformanceFrequency(ref long x);
    }

 

    static void Main(string[] args)
        {
            long stop_Value = 0;
            long start_Value = 0;
            long freq = 0;

            QueryPerformanceMethd.QueryPerformanceFrequency(ref freq);
            QueryPerformanceMethd.QueryPerformanceCounter(ref start_Value);
            //Fun()    需要计时方法          
            QueryPerformanceMethd.QueryPerformanceCounter(ref stop_Value);
            double time = (double)(stop_Value - start_Value) / (double)(freq);

            Console.WriteLine(time);//单位S
            Console.ReadLine();
        }    

计算所得time即为fun()方法所消耗时间。

 

 

C++中QueryPerformanceCounter  QueryPerformanceFrequency的用法

#include "stdafx.h"
#include "windows.h"


void main()
{
    LARGE_INTEGER nFreq;
    LARGE_INTEGER nBeginTime;
    LARGE_INTEGER nEndTime;
    double time;
    QueryPerformanceFrequency(&nFreq);
    QueryPerformanceCounter(&nBeginTime);
    Sleep(1000);
    QueryPerformanceCounter(&nEndTime);
    time = (double)(nEndTime.QuadPart - nBeginTime.QuadPart) / (double)nFreq.QuadPart;
    printf("%f\n", time);
    system("Pause");
}

计算Sleep(1000)所消耗的精确时间,并非精确的1s

 

posted @ 2016-05-11 20:25  我行我素368  阅读(3421)  评论(0编辑  收藏  举报