log4cplus::Initializer
构造函数调用log4cplus::initialize(),析构函数调用log4cplus::Logger::shutdown()
log4cplus::Initializer m_initializer;//构造函数调用log4cplus::initialize(),析构函数调用log4cplus::Logger::shutdown()
还没完:当你使用了ThreadPool之后,log4cplus总是会在main函数执行之前使用static机制初始化,并创建线程池。如果你在main函数退出的时候没有调用
log4cplus::deinitialize();
则线程池中的线程不会退出。导致main函数无法退出。所以要在main函数退出之前调用这句话,如果不调用,那个log4cplus::Initializer m_initializer;只负责调用shutdown,而不负责调用clearThreadPool。只有log4cplus::deinitialize();才会既clearThreadPool又shutdown。
可以单独封装一个接口,类似如下:
void close()
{
log4cplus::deinitialize();
}
然后在主程序main函数return之前调用该函数即可,如下为Qt程序下的main函数:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
.............. // 应用程序其它代码
.............. // 应用程序其它代码
.............. // 应用程序其它代码
int k = a.exec();
close(); // 让日志库log4cplus中的线程池等资源退出,否则即使main退出了,但主进程依然不会退出
return k;
}
非常详细介绍log4cplus的博客:
https://blog.youkuaiyun.com/lx_shudong/article/details/48732999
本文详细介绍了log4cplus库的初始化和关闭流程,特别是如何在main函数退出前正确关闭线程池,避免进程无法退出的问题。通过使用log4cplus::Initializer和log4cplus::deinitialize(),确保资源的正确释放。建议在main函数结束前调用特定接口关闭日志库,以保证程序完整退出。

1566

被折叠的 条评论
为什么被折叠?



