【问题标题】:std::chrono, adding duration to time_pointstd::chrono,将持续时间添加到 time_point
【发布时间】:2025-11-23 22:35:01
【问题描述】:

我正在尝试为 Qt (C++11/MinGW) 中的 time_point 添加一些持续时间,但遇到了问题:

初始化(程序启动时):

auto program_start_time = std::chrono::system_clock::now();
auto offline_time = std::chrono::system_clock::now();

...

一些活动离线:

offline_mark_time = std::chrono::system_clock::now();

...

当活动恢复时,我需要将离线时间添加到我的开始时间:

auto now = std::chrono::system_clock::now();
program_start_time += (now - offline_mark_time);  // <- Does not seem to work

即使编译和执行没问题,程序的行为就像我在加零一样。

如何为 time_point 添加或减去持续时间?

【问题讨论】:

    标签: c++11 duration chrono system-clock


    【解决方案1】:

    这个完整的程序,基于你答案中代码的 sn-ps:

    #include <iostream>
    #include <thread>
    #include <chrono>
    
    int
    main()
    {
        auto program_start_time = std::chrono::system_clock::now();
        auto copy_of_program_start_time = program_start_time;
        auto offline_mark_time = std::chrono::system_clock::now();
        std::this_thread::sleep_for(std::chrono::microseconds(100));
        auto now = std::chrono::system_clock::now();
        program_start_time += (now - offline_mark_time);
        std::cout << (program_start_time > copy_of_program_start_time) << '\n';
    }
    

    为我打印出来:

    1
    

    如果offline_mark_timenow 的构造之间的持续时间小于system_clock::duration 的精度(对我来说是1 微秒),那么nowoffline_mark_time 很可能相等,因此为0在这种情况下将被添加到program_start_time

    【讨论】: