Poco :: ServerApplication的多线程问题

时间:2013-05-31 18:27:06

标签: c++ multithreading poco daemon

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

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

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

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

抱歉我的英语不好:P。我会很感激任何想法吗?

2 个答案:

答案 0 :(得分:3)

从官方的ServerApplication文档:

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

答案 1 :(得分:0)

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