Poco::ServerApplication的多线程问题

Multithread problems with Poco::ServerApplication

本文关键字:问题 多线程 ServerApplication Poco      更新时间:2023-10-16

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

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

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

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

对不起,我的英语很差。有什么好的建议吗?

来自官方ServerApplication文档:

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

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