Многопоточные проблемы с Poco :: ServerApplication

я использую Poco::ServerApplication а также Poco::TaskManager в то же время и столкнулся с проводной проблемой.

Если начать без --daemon вариант, все ок. Однако когда начать с --daemon, задача, переданная диспетчеру задач, никогда не запускается. Я отладил его с помощью GDB и обнаружил, что когда с --daemon опция, потоки во внутреннем пуле задач менеджера задач были запущены и вскоре остановлены. Так что при звонке TaskManager::start, он просто использует уже законченный поток и, таким образом, задача никогда не запускается.

Интересно, связано ли это с каким-либо ограничением для демона linux, или что-то еще вызовет эту проблему?

Вот пример кода, который может воспроизвести проблему на моей коробке.
http://codepaste.net/jhoyt5

Извините за мой плохой английский: P. И я был бы признателен за любые идеи?

1

Решение

Из официальной документации ServerApplication:

Новые потоки должны создаваться только в initialize () или main () или методах, вызываемых оттуда, но не в конструкторе класса приложения или в конструкторе переменных экземпляра. Причина этого заключается в том, что fork () будет вызываться для создания процесса демона, а потоки, созданные до вызова fork (), не будут переданы процессу демона.

3

Другие решения

У меня была такая же проблема. Я на самом деле не запускал потоки в конструкторе, но создавал контейнер Poco :: TaskManager в конструкторе. Как только я создал его в своей функции main (), все работало

0

По вопросам рекламы [email protected]