Название: Ininite-loop при использовании метода install из класса QtServiceController Отправлено: neyroman от Октябрь 30, 2017, 10:47 Всем привет, пишу кросплатформенную программу, которая должна работать как демон на Linux и как сервис на Windows.
Есть несколько варинатов событий, реализованных через флаги. Все обрабатываются нормально за исключением флагов ответственных за установку сервиса/демона. Ситуация такая, что при этом программа доходит до метода install ( из класса QtServiceController ) и при первой итерации этот метод не вызывается, при второй итерации он вызывается ( после обработки метода инсталл должен вызываться метод start из того же класса ), доходит до метода start ( из класса QtServiceController ) и его уже не обрабатывает, по крайней мере корректно, а уходит в бесконечный цикл. Выглядит так будто она вызывает себя повторно, и проходит все этапы обработки флага install, начиная с main. Часть кода, о которой я говорю выглядит следующим образом: Код: if ( !( ptrCtl->isInstalled() ) ) { Цитировать qDebug() << ptrCtl->serviceName() << " was not installed ==================== >>>"; добавлена чтобы сделать вывод программы более читаемым.Вывод выглядит так "d_server" was not installed ==================== >>> "d_server" was successfully installed "d_server" was not installed ==================== >>> .... "d_server" was not installed ==================== >>> При этом аргумент argc в main( int argc, char **argv ) при первой итерации равен 2, при последующих - 4. Мой вопрос: как сделать так, чтобы запускался метод start ( класс QtServiceController ) и программа не уходила в бесконечный цикл. Заранее спасибло за помощь. Весь код не выкладывал, что бы не занимал много места, естественно при необходимости могу выложить. Название: Re: Ininite-loop при использовании метода install из класса QtServiceController Отправлено: qate от Октябрь 30, 2017, 13:04 QtServiceController это не "штатный" класс qt - кто его работу проверял, не ясно
QtServiceController::install тупо вызывает QProcess::execute - смотри что он там делает Ну и кросплатформенно тут не получится вообще Название: Re: Ininite-loop при использовании метода install из класса QtServiceController Отправлено: neyroman от Октябрь 30, 2017, 13:16 Привет, спасибо за ответ. :)
QtServiceController::install тупо вызывает QProcess::execute - смотри что он там делает а почему не получится? я имею ввиду, я понял что он вызывает QProcess и значит только под Unix, но QtSolutions и в частности qtServices позиционируется как средство кросс-платформенной разработки. :-\Ну и кросплатформенно тут не получится вообще Если с этой либой никак, то может есть какие другие варианты разработки под Wndows/Unix ( без использования макросов я имею ввиду ) с Qt либами? Заранее спасибо Название: Re: Ininite-loop при использовании метода install из класса QtServiceController Отправлено: qate от Октябрь 30, 2017, 13:39 если QtServiceController::install тупо вызывает QProcess::execute, то очевидно дальше ты сам определяешь что вызывать в каком случаи, никакой кросплатформенной помощи тут нет
тоже самое с isInstalled - для linux там вообще "заглушка", ибо для каждого linux дистрибутива своя система старта, хотя обычно можно полагаться на ubuntu а что они там про себя позиционируют, так это их дело, по факту - нет итого - для windows изучать winapi, для linux писать скрипт (это вообще большой отдельный вопрос) и его вызывать, нет тут никакой кросплатформенной помощи ну и хорошее место для темы "Вопросы новичков" ) тут надо обе ОС знать хорошо и их вариации Название: Re: Ininite-loop при использовании метода install из класса QtServiceController Отправлено: neyroman от Октябрь 30, 2017, 13:57 qate, спасибо за ответ. Значит придется помучаться :-[, а то я надеялся на легкий исход :D
Название: Re: Ininite-loop при использовании метода install из класса QtServiceController Отправлено: neyroman от Октябрь 30, 2017, 13:58 а какой смысл тогда в QtService если уже есть стандартный QProcess?
Название: Re: Ininite-loop при использовании метода install из класса QtServiceController Отправлено: neyroman от Октябрь 30, 2017, 14:00 ну и хорошее место для темы "Вопросы новичков" ) я просто подумал, что мой вопрос будет каксаться исклюительно использования qt-solutuions, надеялся что затык только в ее незнании.тут надо обе ОС знать хорошо и их вариации Название: Re: Ininite-loop при использовании метода install из класса QtServiceController Отправлено: qate от Октябрь 30, 2017, 15:56 а какой смысл тогда в QtService если уже есть стандартный QProcess? наверно они не смогли, когда поняли что не все так просто Название: Re: Ininite-loop при использовании метода install из класса QtServiceController Отправлено: neyroman от Октябрь 31, 2017, 08:58 Спасибо за ответ, но честно говоря слабо верится что это так. :-\ Надо мне будет тоже получше разобраться с этой либой. ;)
В любом случае спасибо за помощь :D |