如何将时间从chrono存储到双倍内部?

时间:2018-02-04 06:30:25

标签: c++ c++11 chrono

我有一个私人会员的班级:

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

3 个答案:

答案 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()