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

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

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

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

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

23 ответов

24 просмотра

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

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

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

Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
12
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
9
🙋 Ребята, всем привет. Поправил задачу: Нужно каждому новому сообщению (1 раз по каждому юзеру) в чате прибавлять снизу кнопку с предложением подписаться на канал. Как добавит...
Alexander
1
Добрый день. Мне посоветовали обратиться к вам в чат за помощью. Ситуация описана на скрине. Как мне сказали, мне на бота навесили флудвейт. Есть ли возможность снять его ра...
OVERLINK
7
всем привет помогите пожалуйста используя CDN (GCP) у игроков из вьетнама загружается конфиг (размер 999 bytes) загружается 5 и более минут н а других CDN сервисах такой пробл...
Andrew Krw.
1
Просто по очереди выпиливаешь на ручной маппинг? По методу за раз
Andrii Kurdiumov
7
Вопрос: Здравствуйте! У меня возникла проблема с использованием плагина Mall в OctoberCMS. Я использую все файлы и компоненты в их исходном виде, без изменений. Однако на стр...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
2
Приветствую. А не подскажете какие ограничения есть на использования api метода setMyName ? Несколько раз сменил имя бота и получил бан на 2 месяца на смену имени.
Slick Slack
8
Привет, коллеги! Возникла задача ограничить максимальный размер вложений для определённых расширений, например, чтобы для изображений лимит был 10 МБ, а для видео — 100 МБ. Ог...
Andro
1
Карта сайта