LINUX.ORG.RU

qt daemon

 , , ,


0

2

приходилось мне писать демоны на С/С++. но вот на Qt написанных демонов не встречал.

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

как демонизировать консольное приложение, написанное на Qt?

гуглинг выдал что-то про QtService - оно юзабельно?

★★★

Последнее исправление: conalex (всего исправлений: 1)

qt - это не только графический тулкит, так что демона написать можно. Но тебя не поймут.

legolegs ★★★★★
()

как демонизировать консольное приложение, написанное на Qt?

Так же, как и любой другое

XMs ★★★★★
()

гуглинг выдал что-то про QtService - оно юзабельно?

Qt и демоны

но вот на Qt написанных демонов не встречал.

Я писал как-то под древний Qt 2 приправленный проприетарным тулкитом обычное консольное приложение, которое демонизировалось средствами системы (SysVinit), но вряд ли тебе это будет хоть как-то полезно. Делай по уму и по современному, через Qt Service и т. д. Но если интересно, говнокод тут: https://github.com/EXL/keyd/blob/master/keyd.cpp Его суть была в том, чтобы телефон давал виброотдачу при нажатия на кнопки клавитуры.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Делай по уму и по современному, через Qt Service и т. д.

я бы и рад. но чето оно какое-то сбоку изолентой.

conalex ★★★
() автор топика
Ответ на: комментарий от bvn13

Но тебя не поймут.

зашел выразить непонимание? окей.

conalex ★★★
() автор топика
Ответ на: комментарий от bvn13

Qt не GUI-фреймворк в данный момент времени. А всеобъемлющий. Нет ничего плохого в том, чтобы его использовать для безгуёвых приложений. И много кто так и делает, кстати.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от bvn13

Кто сказал что он гуйный? Это какие-то стереотипы. QtGUI и тем более QtWidgets - давно отдельные модули.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от conalex

У меня демон представляет собой обычное приложение, которое форкается, закрывает stdin, stdout и stderr, ну и прочее по мелочи, потом форкается ещё раз. Первый форк управляет вторым и, если тот упадёт, форкается повторно. Qt тут можно присобачить так же, как и любую библиотеку

XMs ★★★★★
()
Ответ на: комментарий от EXL

Разве это хорошо когда одна библиотека пытается решить все проблемы человечества?

Все эти демоны/сервисы уже писались задолго до Qt. Засунули туда ещё и работу с сетью и негативный мобильный гуй...

Короче сборник велосипедов.

ArkaDOSik ★★
()
Ответ на: комментарий от XMs

У меня демон представляет собой обычное приложение, которое форкается, закрывает stdin, stdout и stderr, ну и прочее по мелочи, потом форкается ещё раз. Первый форк управляет вторым и, если тот упадёт, форкается повторно.

это все понятно.

Qt тут можно присобачить так же, как и любую библиотеку

т.е. именно кутешный демон тебе писать и пускать не приходилось. окей.

conalex ★★★
() автор топика
Ответ на: комментарий от ArkaDOSik

Разве это хорошо когда одна библиотека пытается решить все проблемы человечества?

Не знаю. Я в философию не лезу. Есть решение или инструмент и он отлично выполняет свою задачу — берём и используем. Это главное.

Все эти демоны/сервисы уже писались задолго до Qt.

Аргумент того же уровня, что и: резидентные программы кто-то на ассемблере раньше писал, напридумывали тут всяких C и Bash-лапши.

В некоторых случаях daemon на Qt полностью оправдан:

1. Библиотека Qt уже есть в прошивке девайса и на ней построено ПО.
2. Позволяет взаимодействовать с системными средствами (тот же QCopChannel, к примеру).
3. Экономит время на написание, тестирование, меньше возможности стрелять в ноги и т. д.
4. Нужны доп. фичи вроде чтения каких-либо JSON, XML, Ini-файлов из коробки и т. д.

Я просто напомню, что Qt это не GUI-фреймворк и он разделён на библиотеки различных взаимодействий. Можно взять только лишь QtCore и получить нужные плюшки в привычном API сразу, вместо того, чтобы подыскивать какие-то сторонние либы, ковыряться с ними, писать прослойки и слои абстракций, склеивать всё изолентой и т. д.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от conalex
int
main(int argc, char *argv[])
{
    QCoreApplication qtApp(argc, argv);

    // тут код твоего демона

    return qtApp.exec();
}
deep-purple ★★★★★
()
Ответ на: комментарий от conalex

Практически во всех дистрибутивах Linux библиотека Qt отсутствует в стандартной поставке и ставится из репозиториев. То есть твой небольшой демон будет зависеть от большой QtCore, тянуть его при установке. Что не выглядит хорошо. Поэтому под настольный Linux демоны не особо пишут с использованием этого фреймворка. Хотя на GitHub куча всяких примеров по запросу Qt Daemon:

https://github.com/search?p=2&q=Qt Daemon&type=Code

В KDE вон: https://github.com/KDE/bluedevil/blob/688e0492109484cade8aef1f856fe112860dcb0...

Для мобилок вроде Nokia N9 и прочих (мой пример выше), обычно демоны писались с использованием Qt просто потому что этот Qt уже был в системе и на него там всё было завязано.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от XMs

ну, скажем, в Qt-демоне, судя по (не слишком многочисленным) примерам, нужно несколько витиевато организовывать обработку сигналов (не кутэшных, а SIGHUP и т.д.).

потом, неплохой кейс - это запилить кроссплатформенный код системного сервиса (win+lin, скажем).

достаточно фундаментально?

собственно, вопрос был в «поделитесь опытом в написании Qt-демонов».

conalex ★★★
() автор топика
Ответ на: комментарий от conalex

ну, скажем, в Qt-демоне, судя по (не слишком многочисленным) примерам, нужно несколько витиевато организовывать обработку сигналов (не кутэшных, а SIGHUP и т.д.).

Натурально, надо открывать пару сокетов или трубу для каждого unix-сигнала, во write-end пишешь 1 байтик из обработчика unix-сигнала, на read-end цепляешь какой-нибудь QSocketNotifier и он втыкается в свой event loop. И от культей я отошёл давно, но по-моему это было в документации что с ней шла.

d_a ★★★★★
()
Последнее исправление: d_a (всего исправлений: 1)

приходилось мне писать демоны на С/С++. но вот на Qt написанных демонов не встречал. возможно ли такое?

А в чем причина этого вопроса?

гуглинг выдал что-то про QtService - оно юзабельно?

Если надо делать демона с поддержкой винды, то юзай его или https://bitbucket.org/nye/qtdaemon

annulen ★★★★★
()
Ответ на: комментарий от conalex

Видимо, речь о классе, который отсутствует в официальной документации. С этим у меня опыта нет, увы

XMs ★★★★★
()
Ответ на: комментарий от bvn13

гуй-фреймворке

У тебя слишком много ошибок во фразе «Я не знаю, что такое Qt».

hobbit ★★★★★
()

я пишу его сейчас как обычное консольное приложение и пихаю его в screen, запускаю как сервис ubuntu - b ни одной проблемы изза этого не имею или не знаю таких

x905 ★★★★★
()

А чем, например, плох вариант запуска приложения через супервизор какой-нибудь? Тот же самый Runit. Он и перезапустит приложение в случае падения.

hell_wood
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.