在C++中,我能以毫秒为单位获得时间吗
Can I just get time as milliseconds without pain in C++?
所以我找到了这个答案。它构造时间的方式看起来很奇怪(想象一下没有auto
的情况),但它在Visual Studio 2010中也不起作用,因为MSVC版本太旧了。我无法选择我使用的Visual Studio,所以我需要坚持它。Visual Studio错误:
fatal error C1083: Cannot open include file: 'chrono': No such file or directory
所以我看了一下其他的答案,其中大多数像milion怪异的struct
一样声明使用totally::freaky<time> factories
,因为他们试图获得高精度的时间。我对±5毫秒的时间非常满意——我测量的时间是100-5000毫秒。
那么,如何使用旧的C++标准库获得近似的系统/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
我用它玩过,但我看不出两次之间的区别。
我可能会使用Boost Chrono。它构成了现在标准库中的<chrono>
的基础,并且工作原理非常相似。当您可以升级编译器时,转换为使用标准库设施应该相对容易(事实上,在许多情况下,它可以像将using namespace boost::chrono;
更改为using namespace std::chrono;
一样简单)。
无论如何,只要关心一下你决定使用哪个时钟,这就可以满足你的要求,而且代码仍然可以合理地移植——当然可以移植到Windows、Linux和Mac OS等主要系统,我希望(尽管我还没有亲自测试)也可以移植到大多数其他Unixesque系统。
要计算时差,GetTickCount()
很方便。它返回自系统启动以来经过的时间(以毫秒为单位)。
DWORD time1 = GetTickCount();
Something();
DWORD timediff = GetTickCount() - time1;
localtime
不会帮助您。它是标准的C,但它只给你一秒的分辨率。gettimeofday
在Posix上可用,但在Windows上不可用。计算窗口时差的标准答案是QueryPerformanceTimer
。如果您不需要那么高的分辨率,可以使用GetSystemTime
。
- 以天C++为单位的两个时间戳之间的差异
- 如何以毫秒为单位获取开始时间和 now() 之间的毫秒差异(以 C++为单位?
- 如何找到两个日期之间的时间差异(以秒和纳秒为单位)?
- 如何在python和C++中以毫秒为单位打印相同的时间
- C++ 旧时间到现在的时间(以小时为单位)
- 如何找到纪元时间戳和 std::chrono::system_clock::now 之间的时差(以毫秒为单位)
- 仅使用C++中的标准库获取以毫秒为单位的当前日期和时间
- 以秒为单位将时间从纪元转换为一年中的某一天?
- 如何使用闰秒以微秒为单位获取 UTC 时间
- 测量 std::系统的实际执行时间(以 C++ 为单位)
- 优先级队列的时间复杂度(以C++为单位)
- C++以微秒为单位解析日期/时间
- 以C++为单位的聚合代码块的墙时间
- 使用 c++ 获取两个日期与时间字符串之间的差异(以秒为单位)
- 如何在跨平台C++中以毫秒为单位获得系统启动/启动时间(它应该在Windows / IOS / Android / MA
- 以 ns3 为单位计算数据包接收时间
- 如何在C++中以毫秒为单位获取今天的 UTC 午夜时间?
- 计算以毫秒为单位的分类算法对整数阵列排序的时间
- 如何以毫秒为单位获得当前时间
- 以C++为单位测量程序的 CPU 时间和挂钟时间