所以我找到了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
我玩过它,但两次之间无法区别。
答案 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
。