Название: sleep() без зависания интерфейса Отправлено: wolfut от Август 30, 2011, 08:18 Доброго времени суток!
Можно ли в Qt остановить выполнение программы на промежуток времени, без зависания интерфейса? Название: Re: sleep() без зависания интерфейса Отправлено: popper от Август 30, 2011, 08:43 скорее всего, задача неправильно сформулирована. что значит "без зависания интерфейса"? подразумевается, что GUI-элементы активны и реагируют, например, на нажатие мыши? в этом случае главный поток программы должен работать.
если нужно остановить выполнение некоторого алгоритма, то он может быть вынесен в отдельный поток, который может быть остановлен. Название: Re: sleep() без зависания интерфейса Отправлено: wolfut от Август 30, 2011, 09:28 Это понятно, что можно в другом потоке, я просто хочу воспользоваться чем-нибудь другим.........например бесконечный цикл, внутри которого вызывается QApplication::processEvents(), только время определенное не задашь так
Название: Re: sleep() без зависания интерфейса Отправлено: Bepec от Август 30, 2011, 09:31 Твой вариант конечно кривоват, но возможен.
Задай время в количестве слипов (каждые скажем полсекунды processEvent), хочешь на секунд 30. Делаешь цикл с условием на 60 повторений и вуаля. PS хотя я больше потокам доверяю. Подумал немного(редкий случай ::)) - выход прост. Разбей основную обработку на 2. Данные сохраняй с позицией обработки, и во время паузы просто останавливай 1 функцию. Как пауза пройдет(таймер), запускай вторую, продолжающую обработку. PS идеал - 1 функция, которая при смене флага заканчивает обработку элемента и останавливает работу. При повторном вызове продолжает обработку начиная со следующего элемента . Название: Re: sleep() без зависания интерфейса Отправлено: Igors от Август 30, 2011, 10:36 У processEvents есть флажок ждать событие (если его пока нет). Послать самому себе событие таймера и поймать его через processEvents
Название: Re: sleep() без зависания интерфейса Отправлено: GreatSnake от Август 30, 2011, 10:51 Только не мешало бы ещё дропать все мышиные/клавиатурные нажатия и закрытия окон.
Название: Re: sleep() без зависания интерфейса Отправлено: Igors от Август 30, 2011, 11:22 Только не мешало бы ещё дропать все мышиные/клавиатурные нажатия и закрытия окон. И для этого флажок имеется :)Название: Re: sleep() без зависания интерфейса Отправлено: GreatSnake от Август 30, 2011, 11:38 Цитировать И для этого флажок имеется :) Имеется, только вот эвенты остаются в очереди :)Цитата: assistant Note that the events are not discarded; they will be delivered the next time processEvents() is called without the ExcludeUserInputEvents flag. Название: Re: sleep() без зависания интерфейса Отправлено: BRE от Август 30, 2011, 11:59 А разве эти события возможны в очереди событий не главного потока?
Если их туда самому не отправлять. ;) Название: Re: sleep() без зависания интерфейса Отправлено: GreatSnake от Август 30, 2011, 12:02 А разве эти события возможны в очереди событий не главного потока? А разве ТС хочет это делать не в главном потоке? ;)Если их туда самому не отправлять. ;) Название: Re: sleep() без зависания интерфейса Отправлено: BRE от Август 30, 2011, 12:08 А разве ТС хочет это делать не в главном потоке? ;) Точно, а по первому посту я этого не понял... Сори ;)Название: Re: sleep() без зависания интерфейса Отправлено: zenden от Август 30, 2011, 12:13 Код
|