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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QProgressDialog в отдельном потоке  (Прочитано 6278 раз)
minigo
Гость
« : Апрель 14, 2011, 16:37 »

Всем доброго времени суток.

Подскажите, у меня в приложении есть определённые расчёты, занимающие по полминуты иногда минуту. Раньше, когда комплекс был написан на MFC я для отображения процесса расчёта (без точного указания времени) запускал диалоговое окно в котором запускался отдельный поток, который в свою очередь обновлял прогресбар. причём этот диалог был модальный (что очень важно)! Возможно либ подобное сделать в Qt ?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Апрель 14, 2011, 16:39 »

Расчеты в отдельном потоке, откуда сигналишь основному потоку о процентах выполнения.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
minigo
Гость
« Ответ #2 : Апрель 14, 2011, 16:45 »

Расчеты в отдельном потоке, откуда сигналишь основному потоку о процентах выполнения.

Расчёты поставляются в виде отдельной длл, поэтому ничего отсылать не могу. Переносить расчёты из основного потока в отдельный пока тоже затруднительно, поэтому ищу промежуточное решение когда модальный прогрессдиалог заблочит всё приложение на время расчётов.
Записан
RedDog
Гость
« Ответ #3 : Апрель 14, 2011, 16:55 »

Вызов ф-ции из длл делать в отдельном потоке, и из него слать сигналы в модальную форму (которая этот отдельный поток и породит)
Записан
minigo
Гость
« Ответ #4 : Апрель 14, 2011, 17:00 »

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

вызов алгоритма расчёта - это один метод и его прогресс оценить невозможно. В метод расчёта уходит порядка 10 различных объектов, первоначально никто не планировал ставить на них всех мютексы и т.д., поэтому вывести расчёты в отдельный поток не получается (либо на пару недель зависну), поэтом мне и нужно быстрое промежуточное решение.
Записан
mutineer
Гость
« Ответ #5 : Апрель 14, 2011, 17:03 »

А как ты раньше выполнял его в отдельном потоке и прогресс оценивал?
Записан
minigo
Гость
« Ответ #6 : Апрель 14, 2011, 17:16 »

А как ты раньше выполнял его в отдельном потоке и прогресс оценивал?

Раньше у меня был диалог, который создавал отдельный поток и в этом потоке обрабатывался прогрессбар. Этот диалог был модальный. А в основном потоке работали расчёты. Это я замутил на MFC. А прогресс я не оценивал, это типа busy indicator
« Последнее редактирование: Апрель 14, 2011, 17:20 от minigo » Записан
Fess
Гость
« Ответ #7 : Апрель 15, 2011, 08:52 »

ставь для QProgressBar min и max в 0 и будет BusyIndicator.
Или прикрути вот это: http://qt-apps.org/content/show.php/QProgressIndicator?content=115762
на модальную форму.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #8 : Апрель 15, 2011, 09:25 »

QApplication::processEvents
а вообще необязательно делать мьютексы, если запись и чтение происходит лишь из одного потока в один момент времени (пока висит модал диалог мы не трогаем данные и ждем конца вычислений)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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