将标准::时间点乘以标量
Multiply std::chrono timepoint by a scalar
如何将chrono
timepoint
乘以标量?它适用于duration
s,但timepoint
s 不能乘以标量("错误:二进制表达式的操作数无效"(。
上下文:
我有一些代码在现实生活中会运行很长时间。出于测试目的,我希望能够将其速度提高一个因素,因此一切都发生得类似,但只是快进。
我想制作自己的ScaledClock
类,它从chrono::steady_clock
返回值,但具有一个缩放参数,该参数可以设置为大于 1 以实现加速。下面是一些代码:
steady_clock::time_point ScaledClock::now() {
return steady_clock::now() * speedUp; // <--- error
}
void ScaledClock::sleep_for(steady_clock::duration duration) {
std::this_thread::sleep_for(duration / speedUp);
}
void ScaledClock::sleep_until(steady_clock::time_point time) {
std::this_thread::sleep_until(time / speedUp); // <--- error
}
例如,如果 speedUp 为 2,则程序将始终认为已经过去了两倍的时间。它也会睡一半的时间。只要我遵守纪律,不在所有时间都使用这个类,我认为它应该有效。
(或者,如果有人有更好的方法来实现这一目标,我很想听听(。
编辑:评论的副本,因为我认为这是有用的澄清:
en.cppreference.com/w/cpp/chrono/time_point:
类模板 std::chrono::time_point 表示一个时间点。它 实现时,就好像它存储 持续时间 类型的值一样,指示 从时钟纪元开始的时间间隔。
所以我想要自时代翻倍以来的所有时间。如果纪元不是程序执行的开始,并且我的代码碰巧认为它在 4036 中运行,我真的不会感到困扰
您需要存储一个起点(now((,例如在程序启动时(,然后确定自该起点以来经过的时间作为持续时间。然后,您可以将此持续时间乘以因子添加到起点,并将其作为时间点返回到ScaledClock::now()
函数中。就像这样:
#include <chrono>
#include <unistd.h>
int main() {
auto start = std::chrono::steady_clock::now();
sleep(1);
auto actualNow = std::chrono::steady_clock::now();
auto timePassed = actualNow - start;
auto timePassedScaled = timePassed * 2.0;
auto scaledNow = start + timePassedScaled;
return 0;
}
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 从持续时间构造std::chrono::system_clock::time_point
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 使用简单类型列表实现的指数编译时间.为什么
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在已经使用Git的情况下减少编译时间
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 从文本文件中读取时钟时间和事件时间并进行处理
- 具有未知值时的时间复杂性
- 如何减少花费的时间
- C++在变量给定的指定时间内关闭电脑
- rcpp函数中的清理时间很长
- C++:floor unix时间戳到UTC月份
- 如何在c++中录制具有精确帧时间戳的视频
- 为什么 std::optional::operator=(U&&) 要求你是非标量类型?
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 将标准::时间点乘以标量