Название: Приложение остается в задачах Отправлено: FreeSlave от Декабрь 21, 2011, 18:43 Одна из функций, выполняется некоторое время, со специально выставленными задержками в виде
QTime time; time.start(); for(;time.elapsed() < 400;) QApplication::processEvents(); При нажатии на кнопку запускается цикл, в котором помимо прочего вызывается и функция с задержкой. Если закрыть приложение во время выполнения цикла, оно будет продолжать висеть в диспетчере. Как исправить? Название: Re: Приложение остается в задачах Отправлено: BRE от Декабрь 21, 2011, 19:07 Название: Re: Приложение остается в задачах Отправлено: FreeSlave от Декабрь 21, 2011, 19:12 Как функция во время выполнения узнает, что пользователь нажал на выход?
Насколько я понял, приложение не освобождается из памяти, потому что processEvents "насильно" запускает обработку событий. Может, есть более красивый способ организовать задержку? Название: Re: Приложение остается в задачах Отправлено: BRE от Декабрь 21, 2011, 19:20 Может, есть более красивый способ организовать задержку? А для чего нужна задержка внутри приложения?Название: Re: Приложение остается в задачах Отправлено: FreeSlave от Декабрь 21, 2011, 19:35 Программа, собирающая кубик Рубика. При запуске сборки каждый поворот совершается через определенное количество времени, чтобы пользователь мог как бы следить за сборкой (как бы - потому что всё равно непонятно). При выполнении сборки, пользователь может переключаться между двумя видами - проекцией и разверткой. Собственно, для этого я оставил обработку событий в цикле тайма.
Опишу более подробно само строение программы. В main статически создается объект класса, унаследованного от виджета. На нём есть кнопка, по сигналу clicked которой вызывается слот сборки. Там уже вызываются приватные методы класса, представляющие собой этапы сборки, и уже в этих методах вызываются методы поворота, где и стоит задержка. Название: Re: Приложение остается в задачах Отправлено: BRE от Декабрь 21, 2011, 19:48 IMHO, здесь лучше не задержку использовать, а таймер (QTimer), по тику которого будет происходить поворот кубика (следующий тик).
Название: Re: Приложение остается в задачах Отправлено: FreeSlave от Декабрь 21, 2011, 20:28 Пока не совсем понял, как реализовать задержку с помощью QTimer. Читал М.Шлее - у него ничего внятного по этому поводу нет. Не подскажете?
Название: Re: Приложение остается в задачах Отправлено: BRE от Декабрь 21, 2011, 20:48 Пока не совсем понял, как реализовать задержку с помощью QTimer. Читал М.Шлее - у него ничего внятного по этому поводу нет. Не подскажете? Как это происходит сейчас (как я понял):Код
сделать слот, который будет вызываться по таймеру через заданные интервалы времени: Код
Название: Re: Приложение остается в задачах Отправлено: FreeSlave от Декабрь 21, 2011, 21:05 Головоломка собирается в несколько этапов, для каждого своя функция (свой цикл), то есть вычисления нужных поворотов не единообразны. При этом в одной итерации цикла в каждой функции может содержаться по несколько поворотов. Поэтому написать, как вы предложили, не получится. Насколько я понял, в данном случае QTimer сам как бы выступает в качестве цикла, но здесь это совсем не подходит. Нужна местная задержка.
Название: Re: Приложение остается в задачах Отправлено: BRE от Декабрь 21, 2011, 21:58 Нужна местная задержка. Это потому, что ты так написал. :)И разные этапы и разные циклы - все это можно свести к одной функции, которая будет рассчитывать и возвращать следующее состояние. Ну как вариант, вынести задержку в отдельную функции и завести переменную, которую проверять в цикле ожидания. При выходе из программы - эту переменную устанавливать/сбрасывать, цикл будет завершаться и программа останавливаться. Название: Re: Приложение остается в задачах Отправлено: panAlexey от Декабрь 22, 2011, 16:55 а а программу полюбоваться можно? :)
Название: Re: Приложение остается в задачах Отправлено: Ubuntu_linux от Декабрь 22, 2011, 20:51 В Qt обично задержку делают так:
Код
|