я использую Poco::ServerApplication
а также Poco::TaskManager
в то же время и столкнулся с проводной проблемой.
Если начать без --daemon
вариант, все ок. Однако когда начать с --daemon
, задача, переданная диспетчеру задач, никогда не запускается. Я отладил его с помощью GDB и обнаружил, что когда с --daemon
опция, потоки во внутреннем пуле задач менеджера задач были запущены и вскоре остановлены. Так что при звонке TaskManager::start
, он просто использует уже законченный поток и, таким образом, задача никогда не запускается.
Интересно, связано ли это с каким-либо ограничением для демона linux, или что-то еще вызовет эту проблему?
Вот пример кода, который может воспроизвести проблему на моей коробке.
http://codepaste.net/jhoyt5
Извините за мой плохой английский: P. И я был бы признателен за любые идеи?
Из официальной документации ServerApplication:
Новые потоки должны создаваться только в initialize () или main () или методах, вызываемых оттуда, но не в конструкторе класса приложения или в конструкторе переменных экземпляра. Причина этого заключается в том, что fork () будет вызываться для создания процесса демона, а потоки, созданные до вызова fork (), не будут переданы процессу демона.
У меня была такая же проблема. Я на самом деле не запускал потоки в конструкторе, но создавал контейнер Poco :: TaskManager в конструкторе. Как только я создал его в своей функции main (), все работало