Название: [Решено]Чтобы не застывал интерфейс Отправлено: merke от Август 07, 2010, 15:28 Всем привет!
Подскажите функцию в кутях, которая не позволяет зависать главному потоку т.е. GUI во время выполнения долгих вычислений. А то приложение замирает всё на секунд 10 во время выполнения тяжелых вычислений. Буду рад помощи! С уважением, Александр Название: Re: Чтобы не застывал интерфейс Отправлено: f0x от Август 07, 2010, 16:15 читай про многопоточность в книжках или Qt assistant
Название: Re: Чтобы не застывал интерфейс Отправлено: merke от Август 07, 2010, 16:26 многопоточность тут ни при чем. Я знал эту функцию, но она вылетила напрочь из головы!
Название: Re: Чтобы не застывал интерфейс Отправлено: AleUri от Август 07, 2010, 16:35 qApp->processEvents();
Название: Re: Чтобы не застывал интерфейс Отправлено: kowsan от Август 07, 2010, 16:35 QCoreApplication::processEvents
Название: Re: Чтобы не застывал интерфейс Отправлено: merke от Август 07, 2010, 16:45 Супер. Спасибо! то что нужно!!!
Название: Re: [Решено]Чтобы не застывал интерфейс Отправлено: Etud от Август 07, 2010, 18:54 и что ?!!
эта функция спасает от массы операций GUI ? Название: Re: [Решено]Чтобы не застывал интерфейс Отправлено: f0x от Август 07, 2010, 19:46 нет. использовать этот метод для обработки длительных вычислений - далеко не лучший способ
Название: Re: [Решено]Чтобы не застывал интерфейс Отправлено: Igors от Август 07, 2010, 19:49 нет. использовать этот метод для обработки длительных вычислений - далеко не лучший способ Ну тогда уж интересно узнать какой же лучший :)Название: Re: [Решено]Чтобы не застывал интерфейс Отправлено: zenden от Август 07, 2010, 22:29 Отдельный поток, естессно!
А как иначе, если разбить задачу на маленькие кусочки невозможно? А вы уверены, что участок кода, выполняющийся при одних условиях 0.01 с, не будет выполняться при других условиях 10 с? Название: Re: [Решено]Чтобы не застывал интерфейс Отправлено: Igors от Август 08, 2010, 10:05 Отдельный поток, естессно! Чем же оно так естественно? Только тем что такая рекомендация есть в букваре? :)А если посмотреть непредвзято: нужно как-то обновлять индикатор в главной нитке, уметь остановить нитку, поймать завершение и.т.д. И потом: если UI "разрешено" - в нем придется предусмотреть все ситуации когда запущенная нитка потеряла всякий смысл. Поэтому во многих случаях (если не в большинстве) проще и лучше действовать через модальный QProgressDialog (который позовет тот же processEvents) Название: Re: [Решено]Чтобы не застывал интерфейс Отправлено: xokc от Август 08, 2010, 22:31 придется предусмотреть все ситуации когда запущенная нитка потеряла всякий смысл. Поэтому во многих случаях (если не в большинстве) проще и лучше действовать через модальный QProgressDialog (который позовет тот же processEvents) Проще - да. Но лучше ли?Название: Re: [Решено]Чтобы не застывал интерфейс Отправлено: ufna от Август 09, 2010, 11:06 смотря какая задача. Очень часто - лучше. На то эти диалоги и придуманы, как мне кажется.
к примеру, "open fsaved file" в проге - в зависимости от специфики - может занять разное время, и в основной поток грузится много данных. Зачем второй и т.п., если во время открытия пользователю кликать совершенно ничего не надо? Название: Re: [Решено]Чтобы не застывал интерфейс Отправлено: xokc от Август 09, 2010, 21:46 Зачем второй и т.п., если во время открытия пользователю кликать совершенно ничего не надо? Хотя-бы для того, чтобы иметь возможность передвинуть основное окно приложения пока идет обработка. С моей точки зрения использование модальных диалогов для вывода информации - вообще зло. Но это уже совсем другая история. |