测量经过的时间,将开始时间存储为原始类型
Measuring elapsed time, storing the start time as a primitive type
我需要以毫秒为单位测量经过的时间
我需要将开始时间存储为原始类型
我需要检索原始类型的开始时间,以便在进行比较以确定已经过去了多少时间时
有什么建议吗?
我有 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
我需要以毫秒为单位测量经过的时间
我需要将开始时间存储为原始类型
我需要检索原始类型的开始时间,以便在进行比较以确定已经过去了多少时间时
有什么建议吗?
我有 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