Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: daimon от Ноябрь 21, 2009, 00:57



Название: Оценить продолжительность выполнения программы
Отправлено: daimon от Ноябрь 21, 2009, 00:57
Код:
QProgressDialog *dialog=new QProgressDialog("","",0,1200,this,Qt::Dialog|Qt::CustomizeWindowHint|Qt::WindowTitleHint);


spreadsheet->clear();//мой класс таблицы
spreadsheet->setRowCount(1200);
dialog->setCancelButton(0);


for(int i=0;i<1200;i++)
{
qApp->processEvents();
spreadsheet->setItem(i,0,QString::number(i));
dialog->setValue(i);
}
dialog->setValue(1200);
Как добавить оставшееся время для выполнения операции в прогресбар?


Название: Re: Время выполнения операции для progressbar
Отправлено: lit-uriy от Ноябрь 21, 2009, 01:03
>>Как добавить оставшееся время для выполнения операции в прогресбар?
Можно периодически обновлять текст с помощью setLabelText()


Название: Re: Время выполнения операции для progressbar
Отправлено: daimon от Ноябрь 21, 2009, 01:06
>>Как добавить оставшееся время для выполнения операции в прогресбар?
Можно периодически обновлять текст с помощью setLabelText()
Я спрошу вот так - посчетать время оставшееся для выполнения операции
(пример - копирование файлов в системе - оставшееся время)


Название: Re: Время выполнения операции
Отправлено: lit-uriy от Ноябрь 21, 2009, 02:39
чтобы посчитать время оставшееся нужно знать сколько времени выполняется элементарная операция и сколько их всего.
У тебя известно кол-во, а как ты собираешся определять время выполнения элементарной операции? На разных машинах оно будет разным.

>>(пример - копирование файлов в системе - оставшееся время)
эта функция выдаёт приблизительное время. Можешь поступить таким образом:
Делаешь 5 вставок запоминая время затраченное на них, ну а дальше арифметика простая (пропорция)


Название: Re: Время выполнения операции
Отправлено: daimon от Ноябрь 22, 2009, 00:33
чтобы посчитать время оставшееся нужно знать сколько времени выполняется элементарная операция и сколько их всего.
У тебя известно кол-во, а как ты собираешся определять время выполнения элементарной операции? На разных машинах оно будет разным.

>>(пример - копирование файлов в системе - оставшееся время)
эта функция выдаёт приблизительное время. Можешь поступить таким образом:
Делаешь 5 вставок запоминая время затраченное на них, ну а дальше арифметика простая (пропорция)
Да только у меня может быть и одна операция и две (код только пример). Надо наверное считать каждое затраченное время для одной операции (проблема время близится тогда к 0)


Название: Re: Оценить продолжительность выполнения программы
Отправлено: Igors от Ноябрь 22, 2009, 13:18
Как измерить температуру насекомого? Собрать много таких насекомых в банку и опустить туда градусник :)
Код:
	
#define UPDATE_STEP  100
...
QTime curTime;
        curTime.start();
        QTime begTime = curTime;
 
for(int i=0;i<1200;i++)
{
spreadsheet->setItem(i,0,QString::number(i));

                if ((i + 1) % UPDATE_STEP) continue;    // обновиться 1 раз на 100 setItem
                if (curTime.elapsed() < 500)  continue;  // не суетимся если прошло меньше пол-секунды
                
                // теперь обновляемся
dialog->setValue(i);
qApp->processEvents();   // это лучше после dialog->setValue(i);
                curTime.restart();
                
                // прикидываем оставшееся время (в миллисекундах)
                int timeLeft = qint64(begTime.msecTo(curTime)) * (1200 - i) / i;
}
dialog->setValue(1200);


Название: Re: Оценить продолжительность выполнения программы
Отправлено: daimon от Ноябрь 22, 2009, 13:51
Как измерить температуру насекомого? Собрать много таких насекомых в банку и опустить туда градусник :)
Код:
	
#define UPDATE_STEP  100
...
QTime curTime;
        curTime.start();
        QTime begTime = curTime;
 
for(int i=0;i<1200;i++)
{
spreadsheet->setItem(i,0,QString::number(i));

                if ((i + 1) % UPDATE_STEP) continue;    // обновиться 1 раз на 100 setItem
                if (curTime.elapsed() < 500)  continue;  // не суетимся если прошло меньше пол-секунды
                
                // теперь обновляемся
dialog->setValue(i);
qApp->processEvents();   // это лучше после dialog->setValue(i);
                curTime.restart();
                
                // прикидываем оставшееся время (в миллисекундах)
                int timeLeft = qint64(begTime.msecTo(curTime)) * (1200 - i) / i;
}
dialog->setValue(1200);
Зачем использовать тип qint64, на большом количестве шагов - отрицательное время, а так работает
За что отвечает begTime.


Название: Re: Оценить продолжительность выполнения программы
Отправлено: Igors от Ноябрь 22, 2009, 14:30
Зачем использовать тип qint64, на большом количестве шагов - отрицательное время, а так работает
Затем что msecTo может вернуть большое число и когда мы его помножим - можем вылететь за диапазон int.  При 1200 шагов этой проблемы нет, а при 1200*100 есть. Ну а что там отрицательное - уточните


Название: Re: Оценить продолжительность выполнения программы
Отправлено: daimon от Ноябрь 22, 2009, 16:27
как перевести 30000 мс в формат hh:mm:ss:zzz


Название: Re: Оценить продолжительность выполнения программы
Отправлено: lit-uriy от Ноябрь 22, 2009, 16:52
См. QTime:
addMSecs
toString