问题:

使用加载程序(第三方C程序,我们的代码在c ++中)从C库内部调用/初始化Poco代码。


该程序加载我们的库,我们的lib初始化Poco :: Logger并在记录器中使用AsyncChannel + FileChannel。
从这个过程叉。
在子进程中运行一些线程。
尝试退出子进程,加入线程。
AsyncChannel的析构函数在close()上阻塞,实质上是轮询Queue和sleeping。
_queue总是在调用AsyncChannel的析构函数时具有1个元素,我认为这是由于父进程的运行和派生方式引起的。


现在的问题是:这是gcc的问题,即分叉进程不调用构造函数而只是复制内存吗?
我尝试在AsyncChannel :: AsyncChannel()内部调用_queue.clear()但没有结果...

 有人看过这个问题吗?有什么建议的解决方案吗?

最佳答案

在这里回应:

http://pocoproject.org/forum/viewtopic.php?f=10&t=6378
摘要:在fork之后而不是之前创建线程。 Poco :: Util :: Timer和其他类的问题也相同。

关于c++ - Poco AsyncChannel不会在派生进程退出时退出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26998019/

10-15 16:47