我可以在没有C ++痛苦的情况下花费几毫秒的时间吗?

时间:2015-11-02 16:05:29

标签: c++ visual-studio-2010

所以我找到了this answer。它构造时间的方式看起来很奇怪(想象它没有auto),但它 also doesn't work in Visual Studio 2010 ,因为MSVC版本太旧了。我没有选择我使用的Visual Studio,所以我需要坚持下去。 Visual studio错误:

fatal error C1083: Cannot open include file: 'chrono': No such file or directory

所以我看了一下其他的答案,其中大部分声明像milion奇怪的struct ures,使用totally::freaky<time> factories因为他们试图获得高精度时间。我非常满意时间±5毫秒 - 我的测量时间为100 - 5000毫秒。

那么如何使用旧的C ++ std库获得近似系统/ cpu毫秒时间?(MSVC2010)

PS。:在我们项目的一些记录器文件中,我发现了这个:

datetimeEx(){
    time_t timer;
    time( &timer );
    tm *t = localtime( &timer );
    char tmp[32];
    sprintf(tmp, "%02d%02d%02d %02d%02d%02d", t->tm_year - 100, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
    log << tmp;
    return log;
}

它会产生这样的时间:2015-11-02 16:53:57:389我玩过它,但两次之间无法区别。

3 个答案:

答案 0 :(得分:1)

我可能会使用Boost Chrono。它形成了现在在标准库中的<chrono>的基础,并且工作非常相似。当您可以升级编译器时,转换为使用标准库设施应该相对容易(事实上,在许多情况下,它可以像将using namespace boost::chrono;更改为using namespace std::chrono;一样简单。)

在任何情况下,关心您决定使用哪个时钟,这可以满足您的要求,并且仍然可以将代码合理地移植 - 当然对于Windows,Linux和Mac OS等主要系统,我希望(虽然我没有亲自测试过)也是大多数其他Unixesque系统。

答案 1 :(得分:0)

要计算时差,GetTickCount()很方便。它返回自系统启动以来经过的时间,以毫秒为单位。

DWORD time1 = GetTickCount();
Something();
DWORD timediff = GetTickCount() - time1;

答案 2 :(得分:0)

localtime不会帮助你。它是标准C,但它只能为您提供最高分辨率。 gettimeofday可以在Posix上使用,但不能在Windows上使用。 Windows中计算时差的标准答案是QueryPerformanceTimer。如果您不需要那么高的分辨率,可以使用GetSystemTime