Windows/Linux高精度计时器(C++)

举报
风吹稻花香 发表于 2021/06/05 02:13:45 2021/06/05
【摘要】 /* * Linux/Windows 系统高精度计时器 */ #ifndef __LX_TIMER_H__ #define __LX_TIMER_H__ #ifdef WIN32 #include #elif linux #include #endif class LxTimer { public: LxTimer(); ...

  
  1. /*
  2. * Linux/Windows 系统高精度计时器
  3. */
  4. #ifndef __LX_TIMER_H__
  5. #define __LX_TIMER_H__
  6. #ifdef WIN32
  7. #include
  8. #elif linux
  9. #include
  10. #endif
  11. class LxTimer
  12. {
  13. public:
  14. LxTimer();
  15. void start();
  16. double stop(); // 返回从 start 到 stop 所经历的时间(单位:秒)
  17. private:
  18. #ifdef WIN32
  19. double dSystemFreq;
  20. BOOL flag;
  21. double dStartTime;
  22. double dStopTime;
  23. #elif linux
  24. struct timeval tvStart;
  25. struct timeval tvStop;
  26. #endif
  27. };
  28. #endif


  
  1. #include "LxTimer.h"
  2. #ifdef WIN32
  3. #include
  4. #elif linux
  5. #include
  6. #endif
  7. #ifdef WIN32
  8. LxTimer::LxTimer()
  9. {
  10. LARGE_INTEGER sysFreq; // 计时器频率
  11. flag = QueryPerformanceFrequency( &sysFreq );
  12. if ( flag )
  13. {
  14. dSystemFreq = (double)sysFreq.QuadPart;
  15. }
  16. }
  17. void LxTimer::start()
  18. {
  19. LARGE_INTEGER t;
  20. flag &= QueryPerformanceCounter( &t );
  21. if ( !flag )
  22. return;
  23. dStartTime = (double)t.QuadPart;
  24. }
  25. double LxTimer::stop()
  26. {
  27. LARGE_INTEGER t;
  28. flag &= QueryPerformanceCounter( &t );
  29. if ( !flag )
  30. return -1.0;
  31. dStopTime = (double)t.QuadPart;
  32. return ( dStopTime - dStartTime ) / dSystemFreq;
  33. }
  34. #elif linux
  35. LxTimer::LxTimer(){}
  36. void LxTimer::start()
  37. {
  38. gettimeofday( &tvStart, NULL );
  39. }
  40. double LxTimer::stop()
  41. {
  42. gettimeofday( &tvStop, NULL );
  43. return (double)(tvStop.tv_sec - tvStart.tv_sec)
  44. + (double)(tvStop.tv_usec - tvStart.tv_usec)/1000000.0;
  45. }
  46. #endif






文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/54667600

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。