[英]Portable way of counting milliseconds in C++?
是否有任何便携式(Windows和Linux)方式计算两次呼叫之间经过了多少毫秒?
基本上,我想实现与.NET
的StopWatch
类相同的功能。 (对于那些已经使用过它的人)
在一个完美的世界里,我会使用boost::date_time
但这不是一个选项,因为我强制要遵守一些愚蠢的规则。
对于那些更好地阅读代码的人来说,这就是我想要实现的目标。
Timer timer;
timer.start();
// Some instructions here
timer.stop();
// Print out the elapsed time
std::cout << "Elapsed time: " << timer.milliseconds() << "ms" << std::endl;
那么,如果有一个可以帮助我实现Timer
类的可移植(一组)函数,它是什么? 如果没有这样的功能,我应该用什么Windows和Linux API来实现这个功能呢? (使用#ifdef WINDOWS
类似的宏)
谢谢 !
在Linux上(通常在POSIX中),您可以使用gettimeofday
函数,该函数返回自Epoch以来的微秒数。 在Windows上,有GetTickCount
函数,它返回自系统启动以来的毫秒数。
clock() (在Time.h中)返回一个每秒增加CLOCKS_PER_SEC
的值,通常为1000。
在Windows上,使用高性能计时器,这是一个轻而易举的事。
LARGE_INTEGER frequency;
LARGE_INTEGER one;
LARGE_INTEGER two;
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&one);
// something
QueryPerformanceCounter(&two);
std::cout << (((double)two.QuadPart - (double)one.QuadPart) / (double)frequency.QuadPart) * (double)1000;
从理论上讲,这可以达到每个时钟周期的精度,具体取决于所讨论的CPU。
这是我执行此任务的代码(Boost许可证)其中ptime是表示以秒为单位的时间的类+纳秒ptime(int sec,int nano)
并且ptime :: microseconds从posix时间微秒创建秒/纳米对。
根据您的需要重写它并编写这样的类非常容易。
ptime ptime::now()
{
#ifndef BOOSTER_WIN_NATIVE
struct timeval tv;
gettimeofday(&tv,0);
return ptime(tv.tv_sec,tv.tv_usec * 1000);
#else
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
unsigned long long tt = ft.dwHighDateTime;
tt <<=32;
tt |= ft.dwLowDateTime;
tt /=10;
tt -= 11644473600000000ULL;
return ptime(ptime::microseconds(tt));
#endif
}
而且没有便携式C ++功能......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.