class HiPerTimer { [DllImport("user32.dll")] static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); /// <summary> /// 最后一次输入的时间间隔,静态函数,不用实例化即可调用 /// </summary> /// <returns>返回时间长度</returns> public static long GetLastInputTime() { LASTINPUTINFO vLastInputInfo = new LASTINPUTINFO(); vLastInputInfo.cbSize = Marshal.SizeOf(vLastInputInfo); if (!GetLastInputInfo(ref vLastInputInfo)) return 0; return Environment.TickCount - (long)vLastInputInfo.dwTime; } /// <summary> /// 引用 win32 API 中的QueryPerformanceCounter()方法 /// </summary> /// <param name="lpPerformanceCount"></param> /// <returns>该方法用来查询任意时刻高精度计数器的实际值</returns> [DllImport("Kernel32.dll")] private static extern bool QueryPerformanceCounter(out long lpPerformanceCount); /// <summary> /// 引用 win32 API 中的QueryPerformanceFrequency()方法 /// </summary> /// <param name="lpFrequency">每秒的计数值</param> /// <returns>返回高精度计数器每秒的计数值</returns> [DllImport("Kernel32.dll")] private static extern bool QueryPerformanceFrequency(out long lpFrequency); private long starTime, stopTime; private long freq; public HiPerTimer() { starTime = 0; stopTime = 0; QueryPerformanceFrequency(out freq); //{ //} } public void Start() { //让等待线程工作 Thread.Sleep(0); stopTime = 0; QueryPerformanceCounter(out starTime); } public void Stop() { QueryPerformanceCounter(out stopTime); } public double DurationMs { get { return (double)((stopTime - starTime) * 1000 / (double)freq); } } }
有两个部分一个是 最后输入时间函数 一个是运行时间函数,单位为ms
使用方法:
一 距最后输入(鼠标或是键盘)的时间间隔
HiPerTimer.GetLastInputTime(); //单位为ms
二 两次操作的时间,即一个操作所运行的时间
HiPerTimer timer = new HiPerTimer();
在开始操作之前,先启动 timer.Start();
操作完成后,timer.Stop();
此操作的时间为 timer.DurationMs 返回的是ms值