Russian Qt Forum
Май 16, 2024, 13:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Оценить продолжительность выполнения программы  (Прочитано 6814 раз)
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);
Как добавить оставшееся время для выполнения операции в прогресбар?
« Последнее редактирование: Ноябрь 22, 2009, 00:47 от daimon » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Ноябрь 21, 2009, 01:03 »

>>Как добавить оставшееся время для выполнения операции в прогресбар?
Можно периодически обновлять текст с помощью setLabelText()
Записан

Юра.
daimon
Гость
« Ответ #2 : Ноябрь 21, 2009, 01:06 »

>>Как добавить оставшееся время для выполнения операции в прогресбар?
Можно периодически обновлять текст с помощью setLabelText()
Я спрошу вот так - посчетать время оставшееся для выполнения операции
(пример - копирование файлов в системе - оставшееся время)
« Последнее редактирование: Ноябрь 21, 2009, 02:25 от daimon » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Ноябрь 21, 2009, 02:39 »

чтобы посчитать время оставшееся нужно знать сколько времени выполняется элементарная операция и сколько их всего.
У тебя известно кол-во, а как ты собираешся определять время выполнения элементарной операции? На разных машинах оно будет разным.

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

Юра.
daimon
Гость
« Ответ #4 : Ноябрь 22, 2009, 00:33 »

чтобы посчитать время оставшееся нужно знать сколько времени выполняется элементарная операция и сколько их всего.
У тебя известно кол-во, а как ты собираешся определять время выполнения элементарной операции? На разных машинах оно будет разным.

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

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Ноябрь 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);
« Последнее редактирование: Ноябрь 22, 2009, 13:20 от Igors » Записан
daimon
Гость
« Ответ #6 : Ноябрь 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.
« Последнее редактирование: Ноябрь 22, 2009, 14:27 от daimon » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Ноябрь 22, 2009, 14:30 »

Зачем использовать тип qint64, на большом количестве шагов - отрицательное время, а так работает
Затем что msecTo может вернуть большое число и когда мы его помножим - можем вылететь за диапазон int.  При 1200 шагов этой проблемы нет, а при 1200*100 есть. Ну а что там отрицательное - уточните
Записан
daimon
Гость
« Ответ #8 : Ноябрь 22, 2009, 16:27 »

как перевести 30000 мс в формат hh:mm:ss:zzz
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #9 : Ноябрь 22, 2009, 16:52 »

См. QTime:
addMSecs
toString
Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 22.