繁体   English   中英

在C ++中计算毫秒的便携方式?

[英]Portable way of counting milliseconds in C++?

是否有任何便携式(Windows和Linux)方式计算两次呼叫之间经过了多少毫秒?

基本上,我想实现与.NETStopWatch类相同的功能。 (对于那些已经使用过它的人)

在一个完美的世界里,我会使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM