crgd12吧 关注:5贴子:104
  • 2回复贴,共1

高精度计数器类 Win32API

只看楼主收藏回复

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;
using System.ComponentModel;
namespace WindowsFormsApplication4
{
class HiPerformanTimer
{
//引用Win32 API中的QueryPerformanceCounter()方法
//该方法用来查询任意时刻高精度计数器的实际值
[DllImport("Kernel32.dll")]
private static extern bool QueryPerformanceCounter(out long lpPerformaceCount); //引用Win32API中QueryPerformanceFrequency()方法
//该方法返回高精度计数器每秒的计数值
[DllImport("Kernel32.dll")]
private static extern bool QueryPerformanceFerquency(out long lpFrequency); private long startTime, stopTime;
private long frequency; public HiPerformanTimer()
{
this.startTime = 0;
this.stopTime = 0; if (false == QueryPerformanceFerquency(out frequency))
{
throw new Win32Exception();
}
} public void Start()
{
Thread.Sleep(0);
QueryPerformanceCounter(out startTime);
} public void Stop()
{
QueryPerformanceCounter(out stopTime);
} public double Duration
{
get
{
return (double)(stopTime - startTime) * 1000 / (double)frequency;
}
}
}
}



1楼2012-02-09 10:19回复
    修改类名为HiPerformancsTimer


    2楼2012-02-09 10:20
    回复
      2025-05-17 08:31:06
      广告
      单词拼写错误,修改之,并添加ClearTimer函数
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Runtime.InteropServices;
      using System.Threading;
      using System.ComponentModel;
      namespace WindowsFormsApplication4
      {
      class HiPerformancsTimer
      {
      //引用Win32 API中的QueryPerformanceCounter()方法
      //该方法用来查询任意时刻高精度计数器的实际值
      [DllImport("Kernel32.dll")]
      private static extern bool QueryPerformanceCounter(out long lpPerformaceCount); //引用Win32API中QueryPerformanceFrequency()方法
      //该方法返回高精度计数器每秒的计数值
      [DllImport("Kernel32.dll")]
      private static extern bool QueryPerformanceFrequency(out long lpFrequency); private long startTime, stopTime;
      private long frequency; public HiPerformancsTimer()
      {
      this.startTime = 0;
      this.stopTime = 0; if (false == QueryPerformanceFrequency(out frequency))
      {
      throw new Win32Exception();
      }
      } public void Start()
      {
      Thread.Sleep(0);
      QueryPerformanceCounter(out startTime);
      } public void Stop()
      {
      QueryPerformanceCounter(out stopTime);
      } public double Duration
      {
      get
      {
      return (double)(stopTime - startTime) * 1000 / (double)frequency;
      }
      } public void ClearTimer()
      {
      startTime = 0;
      stopTime = 0;
      }
      }
      }
      


      3楼2012-02-09 12:02
      回复