Windows/Linux高精度计时器(C++)
【摘要】 /* * Linux/Windows 系统高精度计时器 */ #ifndef __LX_TIMER_H__ #define __LX_TIMER_H__ #ifdef WIN32 #include #elif linux #include #endif class LxTimer { public: LxTimer(); ...
-
/*
-
* Linux/Windows 系统高精度计时器
-
*/
-
-
#ifndef __LX_TIMER_H__
-
#define __LX_TIMER_H__
-
-
#ifdef WIN32
-
#include
-
-
-
#elif linux
-
#include
-
-
-
#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
-
-
#include "LxTimer.h"
-
-
#ifdef WIN32
-
#include
-
-
-
#elif linux
-
#include
-
-
-
#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
-
文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/jacke121/article/details/54667600
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)