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

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

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

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

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

23 ответов

16 просмотров

Сигнал 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); }

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

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

Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
А как заставить поиск искать? Есть такая формочка <select class="form-control custom-select" name="brand_id" data-handler="onGetBrands"></select>
Денис Александрович
5
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
с помощью чего можно бота добавить как админа в чат? (условно в боте есть кнопка, нажатие на которую приводит тебя к выбору чата и выдаче прав боту)
ηє νєямσяє
5
Ты просто гитлеровскую эстетику плохо понимаешь. Он же всё под Цезаря делал. А это как бы запрещённый приём в политике. Пиджаки они зачем все носят? Чтобы показать что они тип...
Ivan Kropotkin
4
Добрый день, не подскажите, если в OC-V3 поменять страндартную директорию /storage/ на /storage2/ - не будет сильно много проблем ?
Max Dubovsky
32
Добрый день, подскажите как правильно сделать filter в backend-e. Есть модель (товар) у который связь belongsToMany (компания), компаний > 4k, поэтому выборку типа ->all(); н...
Max Dubovsky
7
Или зателаешь в Шелл контейнера ?
Vladimir 
3
А цены чем оправданы?
Lencore
7
Каким то образом можно определить ширину экрана пользователя перед загрузкой partial-а? Надо рассчитать ширину кадров слайдера для ресайза картинок для container-fluid.
Point 111
22
Карта сайта