processEvents() & quit() |
Здравствуйте, гость ( Вход | Регистрация )
processEvents() & quit() |
igor_bogomolov |
18.5.2009, 11:59
Сообщение
#1
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Привет всем.
Столкнулся с проблемкой, что-то не пойму как решить. При старте программы, в основном потоке вызывается длительная функция ~40c (она прогружает платы с ADSP). В силу некоторых причин, не хотелось бы выносить ее в дополнительный поток. Для того чтобы Gui не блокировался, периодически вызывается qApp->processEvents(). Есть QAction связанный с QCoreApplication::quit () Так вот, если в процессе выполнения exeLoader высылается quit, программа не завершается, как мне хотелось бы. Завершится только тогда, когда выйдет из exeLoader.Возможно ли это обойти, не вынося функцию в доп. поток? |
|
|
igor_bogomolov |
18.5.2009, 12:59
Сообщение
#2
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
в каком месте программы она вызывается, случаем не до входа в основной цикл обработки событий? нет, конечно. Цикл обработки событий в момент вызова запущен. Другие события обрабатываеются. Не обрабатывается только выход из программы. В асистенте есть замечание по этому поводу. Можно ли это обойти? вот это еще не понятно, высылается вроде бы triggered Ты все правильно понял. Это я просто так сформулировал. т.е. соединение срабатывает во время а программа закрывается только после завершения функции exeLoader К примеру, есть два коннекта. aboutQt() отробатывает в процессе выполнения exeLoader, quit() - нет.
В книге Бланшета есть такой абзац Цитата One danger with this approach is that the user might close the main window while the application is still saving, or even click File|Save a second time, resulting in undefined behavior. The easiest solution to this problem is to replace Мне же, как раз таки и надо закрыть окно во время выполнения, но этого не происходит.
qApp->processEvents(); with qApp->processEvents(QEventLoop::ExcludeUserInputEvents); |
|
|
Текстовая версия | Сейчас: 19.12.2024, 17:38 |