1

我正在使用Poco::ServerApplicationPoco::TaskManager同时遇到有线问题。

如果没有--daemon选项开始,一切都很好。但是,当以 开头时--daemon,传递给任务管理器的任务永远不会启动。我用gdb调试它,发现当有--daemon选项时,taskmanager的内部任务池中的线程启动并很快停止。所以在调用时TaskManager::start,它只是使用一个已经完成的线程,因此任务永远不会启动。

我想知道这是否是因为对 linux 守护进程的任何限制,或者还有其他什么会导致这个问题?

这是可以在我的盒子上重现问题的示例代码。
http://codepaste.net/jhoyt5

对不起我的英语不好:P。我会很感激任何想法?

4

2 回答 2

4

来自官方的 ServerApplication 文档:

新线程只能在 initialize() 或 main() 或从那里调用的方法中创建,而不能在应用程序类的构造函数或实例变量的构造函数中创建。原因是 fork() 将被调用以创建守护进程,并且在调用 fork() 之前创建的线程不会被接管到守护进程。

于 2013-10-23T15:55:12.390 回答
0

我有同样的问题。我实际上并没有在构造函数中启动线程,而是在构造函数中创建 Poco::TaskManager 容器。一旦我在我的 main() 中创建了它,一切正常。

于 2017-01-12T15:17:03.117 回答