Время до завершения в прогресс баре

  • Иногда не достаточно процента выполненной операции в прогресс баре. Поэтому был придуман класс для отображения времени оставшегося до завершения операции.

    Класс использует простое линейное вычисление для получения оставшегося времени. Например, если в прогрессбаре уже выполнено 10% и это заняло 5 секунд, то для завешения выполнения остаётся 45 секунд.

    TProgressTimeToComplete обеспечивает полную функциональность и может служить как полная замена для MFC класса CProgressCtrl.

    Имеется одна виртуальная функция, которая может быть перегружена для настройки отображения. GetRemainingText вызывается для форматирования вывода текстовой строки, которая выводится поверх прогресс бара. Функция имеет два аргумента процент выполненной операции и время до конца выполнения операции - в секундах. По умолчанию функция выглядит примерно так:

    CString TProgressTimeToComplete::GetRemainingText(double lfPercent, double lfSecsRemaining)
    {
    CString str;
    int nSeconds = (int)fmod(lfSecsRemaining, 60.0);

    if (lfSecsRemaining < 60)
    {
    if (nSeconds < 1)
    str = "Less than a second";
    else
    str.Format("%d second%s remaining", nSeconds, nSeconds==1? "":"s");
    }
    else
    {
    int nMinutes = (int)(lfSecsRemaining/60.0);
    str.Format("%d minute%s, %d second%s remaining", nMinutes, nMinutes==1? "":"s",
    nSeconds, nSeconds==1? "":"s");
    }

    return str;
    }

 

 
« Предыдущая статья   Следующая статья »