Расчет оставшегося времени в C ++ 11
Я пишу класс индикатора выполнения, который выводит обновленный индикатор выполнения каждыйn
тикает кstd::ostream
:
class progress_bar
{
public:
progress_bar(uint64_t ticks)
: _total_ticks(ticks), ticks_occured(0),
_begin(std::chrono::steady_clock::now())
...
void tick()
{
// test to see if enough progress has elapsed
// to warrant updating the progress bar
// that way we aren't wasting resources printing
// something that hasn't changed
if (/* should we update */)
{
...
}
}
private:
std::uint64_t _total_ticks;
std::uint64_t _ticks_occurred;
std::chrono::steady_clock::time_point _begin;
...
}
Я хотел бы также вывести оставшееся время. Я нашел формулу наДругой вопрос что указывает оставшееся время (имена переменных изменены, чтобы соответствовать моему классу):
time_left = (time_taken / _total_ticks) * (_total_ticks - _ticks_occured)
Части, которые я хотел бы заполнить для моего класса являютсяtime_left
иtime_taken
, используя новый C ++ 11<chrono>
заголовок.
Я знаю, что мне нужно использоватьstd::chrono::steady_clock
, но я не уверен, как интегрировать его в код. Я предполагаю, что лучший способ измерить время будетstd::uint64_t
в наносекундах.
Мои вопросы:
Есть ли функция в<chrono>
который превратит наносекунды вstd::string
сказать что-то вроде "3m12s"?Должен ли я использоватьstd::chrono::steady_clock::now()
каждый раз, когда я обновляю свой индикатор выполнения и вычитаю это из_begin
определитьtime_left
?Есть ли лучший алгоритм для определенияtime_left