我有一个私人会员的班级:
std::chrono::duration<double> _time;
并且我在成员函数中有:
auto time = std::chrono::high_resolution_clock::now();
auto deltaTime = time - _time;
.
.
.
_time = time;
我想将deltaTime
用于需要双倍价值的其他内容,但我不知道如何将其变为一个。所有的时间教程似乎只是打印结果,永远不会把它改成双...
例如..
double dTime = convert(deltaTime); // converts time to nanoseconds
答案 0 :(得分:2)
我不知道你准备做什么,但这是一个常见的模式。假设你想要执行一个循环,并获得每次迭代所花费的秒数,以便将其传递给某个函数,该函数期望一个代表秒的double。
using clock_t = std::chrono::high_resolution_clock;
// this is a time_point
auto lastIteration = clock_t::now();
while (true) {
// this is a time_point
auto thisIteration = clock_t::now();
// time_point - time_point = duration
auto elapsed = thisIteration - lastIteration;
lastIteration = thisIteration;
// don't need to pass ratio, because default is 1/1, which is seconds
double seconds = std::chrono::duration<double>(elapsed).count();
someFunction(seconds);
}
如果你想要纳秒,你当然可以将秒数乘以10亿。或者您可以使用:
double nanoseconds = std::chrono::duration<double, std::nano>(elapsed).count();
答案 1 :(得分:1)
auto time = std::chrono::high_resolution_clock::now();
auto ns =
std::chrono::duration_cast<std::chrono::nanoseconds>(time.time_since_epoch()).count();
std::cout << "nanoseconds since epoch " << ns << std::endl;
或
auto time1 = std::chrono::high_resolution_clock::now();
_sleep(1000);
auto time2 = std::chrono::high_resolution_clock::now();
auto ns =
std::chrono::duration_cast<std::chrono::nanoseconds>(time2-time1).count();
std::cout << "nanoseconds " << ns << std::endl;
答案 2 :(得分:1)
这取决于你想要做什么。如果可能,您应该避免使用.count()。如果你想检查自一个时间点以来经过了多少纳秒,那么这样的事情就足够了
auto old_time = std::chrono::high_resolution_clock::now();
// ...
auto new_time = std::chrono::high_resolution_clock::now();
if (new_time - old_time > nanoseconds{value}) {
// do something
}
如果你需要获得真正的双倍价值或者其他什么,因为你要传递给一个无法处理时间的库,那么正如其他答案所指出的那样,你可以在< / p>
double nanosecs = duration_cast<nanoseconds>(new_time - old_time).count()