如何在跨平台c++ 32位系统中获取以毫秒为单位的时间差?
How to get a time difference in milliseconds in a cross platform c++ 32-bit system?
我正在为跨平台 32 位嵌入式系统(windows 和 linux)开发一个 C++ 应用程序。对于一个需要的功能,我需要以毫秒为单位计算时间差。首先,纪元时间戳为 32 位系统提供的最大精度是一秒。我遇到的大多数相关答案都与 64 位相关,例如 std::clock 或 std::chrono 的使用,例如:
std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count();
或系统特定使用
#include <sys/time.h>
或 windows 上的 GetSystemTime 函数。我还检查了 poco 相关的时间函数,但它们也是基于使用 64 位变量。这可以用现有的标准或外部 c++ 库来完成,还是我应该采用不同的方法?
这里有一个 C++11 的方法来获取以毫秒为单位的纪元时间和时差(好吧,std::literals
是 C++14,但你不必使用它):
#include <iostream>
#include <chrono>
using namespace std::literals;
int main()
{
using Clock = std::chrono::system_clock;
auto point1 = Clock::now();
int64_t epoch = point1.time_since_epoch() / 1ms;
std::cout << "Time since epoch: " << epoch << std::endl;
auto point2 = Clock::now();
std::cout << "Time difference in milliseconds: " << ((point2 - point1) / 1ms) << std::endl;
std::cout << "Time difference in nanoseconds: " << ((point2 - point1) / 1ns) << std::endl;
}
Time since epoch: 1486930917677
Time difference in milliseconds: 0
Time difference in nanoseconds: 102000
对于高分辨率时间点差异,标准有chrono::high_resolution_clock
,这可能提供比chrono::system_clock
更高的精度,但它的纪元通常从系统启动时开始,而不是从1-1- 1970.
Time since "epoch": 179272927
Time difference in milliseconds: 0
Time difference in nanoseconds: 74980
请记住,high_resolution_clock
在 2015 年之前在 Visual Studio 上仍然具有 1 秒的精度。它在 Visual Studio 2015+ 中具有 100ns 的精度,并且 应该 在其他平台上至少有 1ms 的精度。
PS std::chrono
在 32 位和 64 位系统上工作完全相同。
我正在为跨平台 32 位嵌入式系统(windows 和 linux)开发一个 C++ 应用程序。对于一个需要的功能,我需要以毫秒为单位计算时间差。首先,纪元时间戳为 32 位系统提供的最大精度是一秒。我遇到的大多数相关答案都与 64 位相关,例如 std::clock 或 std::chrono 的使用,例如:
std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count();
或系统特定使用
#include <sys/time.h>
或 windows 上的 GetSystemTime 函数。我还检查了 poco 相关的时间函数,但它们也是基于使用 64 位变量。这可以用现有的标准或外部 c++ 库来完成,还是我应该采用不同的方法?
这里有一个 C++11 的方法来获取以毫秒为单位的纪元时间和时差(好吧,std::literals
是 C++14,但你不必使用它):
#include <iostream>
#include <chrono>
using namespace std::literals;
int main()
{
using Clock = std::chrono::system_clock;
auto point1 = Clock::now();
int64_t epoch = point1.time_since_epoch() / 1ms;
std::cout << "Time since epoch: " << epoch << std::endl;
auto point2 = Clock::now();
std::cout << "Time difference in milliseconds: " << ((point2 - point1) / 1ms) << std::endl;
std::cout << "Time difference in nanoseconds: " << ((point2 - point1) / 1ns) << std::endl;
}
Time since epoch: 1486930917677
Time difference in milliseconds: 0
Time difference in nanoseconds: 102000
对于高分辨率时间点差异,标准有chrono::high_resolution_clock
,这可能提供比chrono::system_clock
更高的精度,但它的纪元通常从系统启动时开始,而不是从1-1- 1970.
Time since "epoch": 179272927
Time difference in milliseconds: 0
Time difference in nanoseconds: 74980
请记住,high_resolution_clock
在 2015 年之前在 Visual Studio 上仍然具有 1 秒的精度。它在 Visual Studio 2015+ 中具有 100ns 的精度,并且 应该 在其他平台上至少有 1ms 的精度。
PS std::chrono
在 32 位和 64 位系统上工作完全相同。