gpt4 book ai didi

c++ - 如何创建自定义计时时钟

转载 作者:太空狗 更新时间:2023-10-29 20:53:28 24 4
gpt4 key购买 nike

我正在创建时间轴 UI 控件,此时间轴上的时间始终从零开始,就像秒表一样。我想过使用 std::chrono::steady_clock 来保持开始和结束时间在刻度上,但是,在这里设置时钟时间感觉不对,比如“2017 年 3 月上午 10 点”与开始时间无关规模。

我应该/我可以创建一个从“0”开始的自定义时钟吗?

最佳答案

这是一个自定义计时时钟示例,它基于 steady_clock 并从第一次调用开始计算时间(大约):

#include "chrono_io.h"
#include <chrono>
#include <iostream>

struct MyClock
{
using duration = std::chrono::steady_clock::duration;
using rep = duration::rep;
using period = duration::period;
using time_point = std::chrono::time_point<MyClock>;
static constexpr bool is_steady = true;

static time_point now() noexcept
{
using namespace std::chrono;
static auto epoch = steady_clock::now();
return time_point{steady_clock::now() - epoch};
}
};

int
main()
{
using namespace date;
std::cout << MyClock::now().time_since_epoch() << '\n';
std::cout << MyClock::now().time_since_epoch() << '\n';
std::cout << MyClock::now().time_since_epoch() << '\n';
std::cout << MyClock::now().time_since_epoch() << '\n';
}

只需要定义嵌套类型 durationrepperiod 就可以从 steady_clock,然后创建它自己的 time_point。不应该使用 steady_clocktime_point 因为 MyClocksteady_clock 的纪元是不同的,你不不想在算术中不小心混合这两个 time_point

因为MyClock是基于steady_clock的,所以它是_steady

now() 函数将当前时间 epoch 存储在一个 static 中(在第一次调用时计算),然后只是在每次调用时查找自 epoch 以来的时间。此减法创建一个 duration,可用于构造一个 MyClock::time_point

我正在使用 "chrono_io.h"只是因为我在格式化方面很懒惰。您不需要该标题来创建自己的自定义时钟。这只会让打印持续时间变得更容易。

这个程序只是为我输出:

1618ns
82680ns
86277ns
88425ns

关于c++ - 如何创建自定义计时时钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42613031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com