是否有任何便携式(Windows& Linux)方式可以计算两次通话之间经过的毫秒数?
基本上,我希望实现与StopWatch
.NET
类相同的功能。 (对于那些已经使用过它的人)
在一个完美的世界里,我会使用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&amp;我应该使用Linux API来实现这个功能吗? (使用#ifdef WINDOWS
- 像宏一样)
谢谢!
答案 0 :(得分:4)
在Linux上(通常在POSIX中),您可以使用gettimeofday
函数,该函数返回自Epoch以来的微秒数。在Windows上,有GetTickCount
函数,它返回自系统启动以来的毫秒数。
答案 1 :(得分:2)
clock()(在Time.h中)返回一个每秒增加CLOCKS_PER_SEC
的值,通常为1000。
答案 2 :(得分:0)
在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。
答案 3 :(得分:0)
这是我执行此任务的代码(Boost许可证)
其中ptime是表示以秒为单位的时间+纳秒ptime(int sec,int nano)
ptime :: microseconds从posix time microseconds创建sec / nano对。
根据您的需要重写它并编写这样的课程非常容易。
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 ++函数......