计时器

Timer.h

复制代码
#ifndef __LX_TIMER_H__  
#define __LX_TIMER_H__  
  
#ifdef WIN32  
    #include <Windows.h>  
#elif linux  
    #include <sys/time.h>  
#endif  
  
class LxTimer  
{  
public:  
    LxTimer();  
    void   start();  
    double stop();   // 返回从 start 到 stop 所经历的时间(单位:秒)  
  
private:  
#ifdef  WIN32  
    double dSystemFreq;   
    BOOL   flag;  
    double dStartTime;  
    double dStopTime;  
#elif  linux  
    struct timeval tvStart;  
    struct timeval tvStop;  
#endif  
};  
  
#endif
复制代码

 

Timer.cpp

 

复制代码
#include "stdafx.h"
#include "timer.h"  
 
#ifdef  WIN32  
#include <Windows.h>  
#elif  linux  
#include <sys/time.h>  
#endif  
  
#ifdef WIN32  
LxTimer::LxTimer()  
{  
    LARGE_INTEGER sysFreq;  // 计时器频率  
    flag = QueryPerformanceFrequency( &sysFreq );  
    if ( flag )  
    {  
        dSystemFreq = (double)sysFreq.QuadPart;  
    }  
}  
  
void LxTimer::start()  
{  
    LARGE_INTEGER t;  
    flag &= QueryPerformanceCounter( &t );  
    if ( !flag )  
        return;  
    dStartTime = (double)t.QuadPart;  
}  
  
double LxTimer::stop()  
{  
    LARGE_INTEGER t;  
    flag &= QueryPerformanceCounter( &t );  
  
    if ( !flag )  
        return -1.0;  
      
    dStopTime = (double)t.QuadPart;  
    return ( dStopTime - dStartTime ) / dSystemFreq;  
}  
  
#elif  linux  
  
LxTimer::LxTimer(){}  
  
void LxTimer::start()  
{  
    gettimeofday( &tvStart, NULL );  
}  
  
double LxTimer::stop()  
{  
    gettimeofday( &tvStop, NULL );  
    return (double)(tvStop.tv_sec - tvStart.tv_sec)  
        + (double)(tvStop.tv_usec - tvStart.tv_usec)/1000000.0;  
}  
  
#endif
复制代码

 

posted @   王程根的技术博客  阅读(207)  评论(1编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示