LINUX.ORG.RU

Qt: общий вопрос


0

1

есть приложение графическое иногда оно что то очень эффективно считает или проделывает действия с интерфейсом программы. вопрос как сделать так, чтобы без использования таймеров и тредов можно было на время приостановить например какой то цикл, вернуть приложению волю, скажем на 100мс а потом опять продолжить. Т.е. приложение не становилось бы «зависшим», время от времени возвращая контроль над приложением системе и пользователю.

Может, стоит разнести эти задачи по разным потокам?

fragment ()

запускать в отдельном потоке QThread

его можно ставить на паузу.

MikeDM ★★★★★ ()

>>чтобы без использования таймеров и тредов можно

никак

alex_custov ★★★★★ ()

>время от времени возвращая контроль над приложением системе и пользователю.

QApplication::processEvents();

schizoid ★★★ ()

Поток не подойдет?
Как вариант (через одно место) делать с помощью timer+signal+slot

ymuv ★★★★ ()

Задачу запускать в отдельном потоке, о результатах сообщать событиями (сигналами?).

note173 ★★★★★ ()

без использования таймеров и тредов

Тред полон чукчей. ТС, тебе не повезло, грамотных кутешников на этом ресурсе исчезающе мало. Большинство даже не понимает чего ты хочешь.

baverman ★★★ ()
Ответ на: комментарий от baverman

Тред полон чукчей. ТС, тебе не повезло, грамотных кутешников на этом ресурсе исчезающе мало.

Ты чо, тупой штоле, баклан? При чём тут QT? Чудес не бывает - на чём бы ты ни писал тебе придётся создавать поток для таких целей. Впрочем по QT действительно лучше идти консультироваться к тюксоиду на rulinux.net. С ЛОРа в последнее время вычистили разбирающихся людей.

anonymous ()
Ответ на: комментарий от anonymous

на чём бы ты ни писал тебе придётся создавать поток для таких целей

Применительно к Qt, кто мешает обработать накопившиеся *гуевые* события? Ни за что не поверю, что этого там не предусмотрено.

baverman ★★★ ()
Ответ на: комментарий от baverman

schizoid же ответил, что для этого надо использовать QApplication::processEvents(). Эту функцию вставляют внутрь долго выполняемого цикла, и она обрабатывает все накопившиеся события. processEvents() специально создана, что бы не городить потоки в простых программах.

akinator ★★ ()

При использовании QApplication::processEvents() будь не менее осторожен, чем при использовании потоков, т.к. можешь получить рекурсивный вызов той же функции, что вызвала processEvents. Как вариант, можно удалить какой-нибудь объект, использующийся в той «тяжёлой» функции и получить сегфолт на казалось бы ровном месте. В общем, отнесись предельно внимательно.

unC0Rr ★★★★★ ()

какие именно действия с интерфейсом?

VladimirMalyk ★★★★★ ()

Копай в сторону QApplication::processEvents() А вообще да, потоки в этом отношении лучше. Можно ещё и QtConcurrent пнуть.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.