crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> подсчитать примерное время, выполнения операции
void*
  опции профиля:
сообщение 7.2.2009, 1:22
Сообщение #1


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


есть ли в Qt классы для того чтобы примерно подсчитать время выполнения какой-либо операции? т.е. допустим выполняется какая-то операция и нужно на прогрессбар посылать значение в процентах о выполнении...
слышал что-то насчет классов QFuture* - они этим занимаются? может кто-то уже работал с этими классами и может объяснить как их использовать?

П.С. в моем случае мне нужно как-то "мониторить" выполнение цикла, в котором выполняется слот n-ное кол-во раз

Сообщение отредактировал void* - 7.2.2009, 1:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 7.2.2009, 1:31
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(void* @ 7.2.2009, 4:22) *
слышал что-то насчет классов QFuture* - они этим занимаются?
это из области параллельной работы.

Цитата(void* @ 7.2.2009, 4:22) *
есть ли в Qt классы для того чтобы примерно подсчитать время выполнения какой-либо операции?
считать только ручками, писал еще здесь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 7.2.2009, 17:00
Сообщение #3


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


void*,
посомтри QTime::start()
может поможет
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 8.2.2009, 1:27
Сообщение #4


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


нет, я имел ввиду парралельно с выполнением операции показывать прогресс ее выполнения, поэтому таймеры тут не катят

кстати QFutureWatcher вроде бы это может, но я так и не понял как вызвать нужную мне функцию, параметром которой является QString, для каждого элемента QStringList
пробовал так(почти как в примере):
пример
QProgressDialog dialog;
dialog.setLabelText(tr("Analyzing files..."));
QFutureWatcher<void> futureWatcher;
connect(&futureWatcher, SIGNAL(finished()), &dialog, SLOT(reset()));
connect(&futureWatcher, SIGNAL(progressRangeChanged(int, int)), &dialog, SLOT(setRange(int, int)));
connect(&futureWatcher, SIGNAL(progressValueChanged(int)), &dialog, SLOT(setValue(int)));
futureWatcher.setFuture(QtConcurrent::map(filenames.toVector(), slotOpenFile));
dialog.exec();
futureWatcher.waitForFinished();
qDebug() << "Canceled - " << futureWatcher.future().isCanceled();

но ругается на строчку futureWatcher.setFuture(QtConcurrent::map(filenames.toVector(), slotOpenFile));
видимо что-то с параметрами напутал, но не могу найти нигде описания типов параметров функции QtConcurrent::map()

Сообщение отредактировал void* - 8.2.2009, 1:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.2.2009, 1:46
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


я такой диалог делал на с помощью QProgressDialog, без каких-либо дополнительных штуковин
  QProgressDialog progress(tr("Чтение данных"), "", 0, 4, this);
    progress.setWindowModality(Qt::WindowModal);
    progress.setMinimumDuration(0);
    progress.setValue(1);
    
    <...>
    progress.setValue(2);
    <...>
    progress.setValue(3);
    <...>
    progress.setValue(4);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 8.2.2009, 11:31
Сообщение #6


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


Litkevich Yuriy, так я тоже пробовал, но у меня не получается вовремя нормально отобразить диалог, он появляется но в нем ничего нет, где я туплю?
как я делаю
QProgressDialog dialog;
dialog.setLabelText(tr("Analyzing files..."));
dialog.setRange(0, 100);
dialog.show();
for(int i=0; i!=filenames.size(); ++i) {
    dialog.setLabelText(tr("Analyzing file ") + filenames[i] + "...");
    slotOpenFile(filenames[i]);
    dialog.setValue((100/filenames.size())*(i+1));
}
dialog.reset();


П.С. filenames - QStringList, кол-во элементов заранее неизвестно

Сообщение отредактировал void* - 8.2.2009, 11:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 8.2.2009, 12:19
Сообщение #7


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


все, разобрался, оказывается при вызове setValue() диалог сам показывается, а я думал его нужно вручную показывать
результат
QProgressDialog dialog;
dialog.setLabelText(tr("Analyzing files..."));
dialog.setRange(0, 100);
dialog.setWindowModality(Qt::WindowModal);
for(int i=0; i!=filenames.size(); ++i) {
    dialog.setLabelText(tr("Analyzing file ") + filenames[i] + "...");
    slotOpenFile(filenames[i]);
    dialog.setValue((100/filenames.size())*(i+1));
}
dialog.setValue(100);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.2.2009, 12:45
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(void* @ 8.2.2009, 15:19) *
оказывается при вызове setValue() диалог сам показывается,
ага, я два часа немог понять в чем дело, когда пример из асистента скопировал тогда понял. Поэтому у меня сразу устанавливается значение в еденичку.

Но я нашел касяк странный:
как видно из моего примера, я устанавливаю собственный текст, и удаляю текст на кнопке (чтоб пользователя не повожать, т.к. пока нет обработчика прерывания процесса). Дак вот на трех тачках все как я задумал, а на ноуте (ВинХП СП3) диалог показывается стандартный!!!!

Откуда там не моя надпись в диалоге и на кнопке, да еще по аглицки?????????

У мнея ни одной догадки нет
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 2.12.2024, 7:21