测量经过的时间,将开始时间存储为原始类型

Measuring elapsed time, storing the start time as a primitive type

  1. 我需要以毫秒为单位测量经过的时间

  2. 我需要将开始时间存储为原始类型

  3. 我需要检索原始类型的开始时间,以便在进行比较以确定已经过去了多少时间时

有什么建议吗?

我有 C++17,不想使用任何外部库(比如 boost)。

std::chrono 如果有人可以向我解释如何将经过的时间 to/from 转换为原语,那就太好了。我不太擅长C++。

分辨率精度并不重要..如果它有几十毫秒的偏差也没关系,我只需要实施延迟..例如100 毫秒或 1.5 秒

因为要存储开始时间,所以应该使用std::chrono::system_clock。它的纪元是稳定的,不会随时间变化。其他 std::chrono 时钟的纪元可能会在程序的 运行 之间发生变化,因此由一个 运行 存储并由后续 运行 读回的时间点可能不会保持一致。

以毫秒为单位获取当前时间:

auto now = std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now());

我喜欢使用 using 指令或命名空间别名来使此类代码不那么冗长:

using namespace std::chrono;
auto now = time_point_cast<milliseconds>(system_clock::now());

now转换为有符号的64位整数类型:

auto now_i = now.time_since_epoch().count();

now_i 转换回 time_point:

time_point<system_clock, milliseconds> prev{milliseconds{now_i}};

比较time_points:

if (now > prev)
    ...

以上所有内容都在 header <chrono>:

#include <chrono>

您可以通过以下方式轻松完成此操作:

double time = 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC;

为了更好地理解,请参阅下面的代码。

#include <iostream>
#include <time.h>

using namespace std;

int main() {
  double start = 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC;

  for(int i=0;i<1e9;i++);

  double end = 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC;

  double time_taken = end - start;
  cout << time_taken << "ms\n";
  
  return 0;
}

包含头文件:

#include <time.h> // include this