Название: Анимация с помощью QTimer тормозит Отправлено: Maksim от Август 17, 2010, 11:48 Всем Болшой Привет!
Сломал себе уже голову, но решения просто не нахожу... ( Читал все другие темы по вопросам QThread и QTimer. Переносил свой таймер в другой thread. С "event loop" без него...нех** не работает ... :-[ ) Задачка в принципе проста (или всё же нет?!?! ::) ). Сделал некий виджет с отрисовкой анимации: (http://img525.imageshack.us/img525/6669/qwaitwidget.png) Перерисовка запускаетса с помощью QTimer. Всё красиво хорошо. Стоит поднопряч главний поток - отрисовка тормозит. Внимание вопрос: Как избавитса от тормозов?!?!??!?!??!?! П.С: исходники прилогаю Название: Re: Анимация с помощью QTimer тормозит Отправлено: BRE от Август 17, 2010, 11:59 Ну так не поднапрягай главный поток. :)
Напрягай другие, запустив свой слот, ты полностью остановил всю работу главного потока, вместе с циклом обработки событий. Название: Re: Анимация с помощью QTimer тормозит Отправлено: BRE от Август 17, 2010, 12:25 Ето просто не реално переписать всю программу из за одного сра**** окна.... не ужели нет вариантов?!?!? :'( Что значит переписать всю программу.Всю "тяжелую" работу перенеси в отдельный поток (создай еще один класс) и запускай его в твоем слоте. Ничего фатального здесь нет. Ну а если лень все переписывать, то добавь в долгий цикл вызов: QApplication::processEvents(); Название: Re: Анимация с помощью QTimer тормозит Отправлено: Maksim от Август 17, 2010, 13:04 @BRE : You are my hero for today!!!!!!! :-)
Спасиба, работает!!!!!!!!!!!!!!!!! :) Название: Re: Анимация с помощью QTimer тормозит Отправлено: fuCtor от Август 17, 2010, 13:47 Почитайте про QtConcurrent, если не хотите заморачиваться с потоками ;)
Название: Re: Анимация с помощью QTimer тормозит Отправлено: niXman от Август 17, 2010, 20:15 попробуй "QTimer::singleShot(1, sender, SLOT(slotname()))"
Название: Re: Анимация с помощью QTimer тормозит Отправлено: BRE от Август 17, 2010, 20:37 Для чего использовать синхронные запросы?
Поток создается после вызова метода QThread::start() и начинает выполняться после передачи ему управления. Проще подробно рассказать, что ты хочешь сделать и думаю решение быстро найдется. ;) Название: Re: Анимация с помощью QTimer тормозит Отправлено: Maksim от Август 18, 2010, 13:33 Привет Всем!
Задачу решил! Кому интерессно решение выглядит (примерно) так: Код: //----------------------------------------------------------------- Название: Re: Анимация с помощью QTimer тормозит Отправлено: Igors от Август 18, 2010, 15:31 Код: //proceed events to keep wait animation going Название: Re: Анимация с помощью QTimer тормозит Отправлено: Maksim от Август 18, 2010, 17:41 Так пользователь никак не сможет прервать callThread. Плюс грузите главную нитку без нужды Ползователь и не должен callThread прерывать. Ето будет равноправно ошибке в запросе к серверу. Загружать главную нить приходитса, посколку сервер не поддерживает многопоточность. Клиент заппосил данные от сервера и будет ждать пока тот не ответит. Раньше программа на етом месте замерзала, окна не отрисовивались - теперь всё как нужно :-) Название: Re: Анимация с помощью QTimer тормозит Отправлено: fuCtor от Август 19, 2010, 19:50 http://doc.trolltech.com/4.6/qtconcurrentrun.html#run
+ http://doc.trolltech.com/4.6/qfuture.html + http://doc.trolltech.com/4.6/qfuturewatcher.html То что доктор прописал. Через run пускаете запрос к серверу. На qfuturewatcher вешаете при старет блокировать компоненты или взводить флаги, а при завершении востанавливать и получать результат выполнения действия. Таким образом основной поток не блокируется, нет активного ожидания (ЗЛО) и все псевдоасинхронно. |