Расчет оставшегося времени в 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

Ответы на вопрос(2)

Ваш ответ на вопрос