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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено]Чтобы не застывал интерфейс  (Прочитано 5624 раз)
merke
Гость
« : Август 07, 2010, 15:28 »

Всем привет!

Подскажите функцию в кутях, которая не позволяет зависать главному потоку т.е. GUI во время выполнения долгих вычислений. А то приложение замирает всё на секунд 10 во время выполнения тяжелых вычислений.

Буду рад помощи!

С уважением, Александр
« Последнее редактирование: Август 07, 2010, 16:45 от merke » Записан
f0x
Гость
« Ответ #1 : Август 07, 2010, 16:15 »

читай про многопоточность в книжках или Qt assistant
Записан
merke
Гость
« Ответ #2 : Август 07, 2010, 16:26 »

многопоточность тут ни при чем. Я знал эту функцию, но она вылетила напрочь из головы!
Записан
AleUri
Гость
« Ответ #3 : Август 07, 2010, 16:35 »

qApp->processEvents();
Записан
kowsan
Гость
« Ответ #4 : Август 07, 2010, 16:35 »

QCoreApplication::processEvents
Записан
merke
Гость
« Ответ #5 : Август 07, 2010, 16:45 »

Супер. Спасибо! то что нужно!!!
Записан
Etud
Гость
« Ответ #6 : Август 07, 2010, 18:54 »

и что ?!!

эта функция спасает от массы операций GUI ?
Записан
f0x
Гость
« Ответ #7 : Август 07, 2010, 19:46 »

нет. использовать этот метод для обработки длительных вычислений - далеко не лучший способ
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Август 07, 2010, 19:49 »

нет. использовать этот метод для обработки длительных вычислений - далеко не лучший способ
Ну тогда уж интересно узнать какой же лучший  Улыбающийся
Записан
zenden
Гость
« Ответ #9 : Август 07, 2010, 22:29 »

Отдельный поток, естессно!

А как иначе, если разбить задачу на маленькие кусочки невозможно?
А вы уверены, что участок кода, выполняющийся при одних условиях 0.01 с, не будет выполняться при других условиях 10 с?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Август 08, 2010, 10:05 »

Отдельный поток, естессно!
Чем же оно так естественно? Только тем что такая рекомендация есть в букваре?  Улыбающийся
А если посмотреть непредвзято: нужно как-то обновлять индикатор в главной нитке, уметь остановить нитку, поймать завершение и.т.д. И потом: если UI "разрешено" - в нем придется предусмотреть все ситуации когда запущенная нитка потеряла всякий смысл. Поэтому во многих случаях (если не в большинстве) проще и лучше действовать через модальный QProgressDialog (который позовет тот же processEvents)
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #11 : Август 08, 2010, 22:31 »

придется предусмотреть все ситуации когда запущенная нитка потеряла всякий смысл. Поэтому во многих случаях (если не в большинстве) проще и лучше действовать через модальный QProgressDialog (который позовет тот же processEvents)
Проще - да. Но лучше ли?
Записан
ufna
Гость
« Ответ #12 : Август 09, 2010, 11:06 »

смотря какая задача. Очень часто - лучше. На то эти диалоги и придуманы, как мне кажется.

к примеру, "open fsaved file" в проге - в зависимости от специфики - может занять разное время, и в основной поток грузится много данных. Зачем второй и т.п., если во время открытия пользователю кликать совершенно ничего не надо?
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #13 : Август 09, 2010, 21:46 »

Зачем второй и т.п., если во время открытия пользователю кликать совершенно ничего не надо?
Хотя-бы для того, чтобы иметь возможность передвинуть основное окно приложения пока идет обработка. С моей точки зрения использование модальных диалогов для вывода информации - вообще зло. Но это уже совсем другая история.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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