Доброго деня. Вопрос: есть ли у QCoreApplication функция типа isQuited -

был вызван qApp->quit()

реализую следующее:

1. отлов сигнала SIGTERM и вызова в нём qApp->quit()
2. тяжелый цикл в котором я могу переодически вызывать qApp->processEvents() и опрашивать qApp что он ещё живой

как сделать сие без использования глобальной булевой переменной которую предётся тащить во все тяжелые модули обработки?

23 ответов

28 просмотров

Сигнал aboutToQuit() есть.

Андрей-Тарасенко Автор вопроса
Flower Surgeon
Сигнал aboutToQuit() есть.

да. это именно сигнал. а мне нужна функция которую я сам вызову

Андрей Тарасенко
да. это именно сигнал. а мне нужна функция которую...

Есть ещё closingDown(), но я не уверен, что это подходит.

Андрей Тарасенко
да. это именно сигнал. а мне нужна функция которую...

А что не так с сигналом? Если нужен блокирующий коллбэк, то можно DirectConnection заюзать.

У меня оно так работает

Андрей-Тарасенко Автор вопроса
Flower Surgeon
Есть ещё closingDown(), но я не уверен, что это по...

за наводку спасибо. сейчас опробую. хотя тут до разрушения qApp далеко, но вдруг сработает.

Андрей Тарасенко
да. это именно сигнал. а мне нужна функция которую...

У QObject есть property/setProperty, по сигналу можете попробовать добавить своё property в qcoreapplication, а по месту его проверять.

Андрей-Тарасенко Автор вопроса
Alexander Tokarev
У меня оно так работает

я внутри тяжелого цикла. только в этом загвоздка. а так да, нормальное решение. я и сам так делаю для гуишечек

Андрей-Тарасенко Автор вопроса
Alex.Z
У QObject есть property/setProperty, по сигналу мо...

:) ну в принципе да. раз не хочу переменную, то спрятать её в существующую глобальную. спасибо за идею!

Андрей Тарасенко
я внутри тяжелого цикла. только в этом загвоздка. ...

а qApp->processEvents() в теле цикла вызывается несколько раз, или в конце?

Андрей-Тарасенко Автор вопроса
Flower Surgeon
А что не так с сигналом? Если нужен блокирующий ко...

ну как-то некрасиво получается просто. 1. придётся делать класс QObject c его слотсигналами (идеалогия-то хорошая, но тут у меня просто функция с толстенным обработчиком) 2. в слоте опять заводить флаг завершения и слот его взведения в каждом классе обработчике. проще тогда флаг протащить. да . это всё рабочие решения. но я думал что есть что-то готовое чтоб не тащить ровно один глобальный флаг сквозь всю программу

Андрей Тарасенко
ну как-то некрасиво получается просто. 1. придётся...

Так а изначально для чего такой флаг завершения понадобился?

Андрей Тарасенко
корректно прервать цикл

Цикл в каком-то другом потоке?

qApp не должен стать nullptr после этого разве?

Flower Surgeon
С чего ради? Это ж синглтон.

и что, что синглтон? синглтон не может быть nullptr по-твоему?

Flower Surgeon
Нет, не может, почитай как он устроен.

Тогда дай разработчикам Qt почитать заодно, потому что они очищают QCoreApplication::self, который выдается по QCoreApplication::instance(), к которому ведет макрос qApp https://github.com/qt/qtbase/blob/dev/src/corelib/kernel/qcoreapplication.cpp#L884

Андрей-Тарасенко Автор вопроса
𝙼𝚛. 𝙲𝚘𝚘𝚠𝚙𝚕𝚎𝚛 𝚠𝙷𝚊𝚝
qApp не должен стать nullptr после этого разве?

нет конечно. quit всего лишь завершает цикл обработки событий. если бы он делал делит, то у всех программа крашилась бы при завершении. т.к. Q(Core)Application выделена на стеке в функции main ЗЫ. по итогу сделал через глобальную переменную. хоть и не красиво, но другого не придумал

set_exit_handler(int sig) { struct sigaction sa; memset(&sa, 0, sizeof(sa)); sa.sa_handler = daemon_exit_handler; if( sigaction(sig, &sa, nullptr) != 0 ) daemon_error_exit("Can't set daemon_exit_handler for sig:%d : %m\n", sig); }

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта