log4cplus导致主进程不能退出问题解决
log4cplus::Initializer
構(gòu)造函數(shù)調(diào)用log4cplus::initialize(),析構(gòu)函數(shù)調(diào)用log4cplus::Logger::shutdown()
log4cplus::Initializer m_initializer;//構(gòu)造函數(shù)調(diào)用log4cplus::initialize(),析構(gòu)函數(shù)調(diào)用log4cplus::Logger::shutdown()
還沒完:當(dāng)你使用了ThreadPool之后,log4cplus總是會在main函數(shù)執(zhí)行之前使用static機(jī)制初始化,并創(chuàng)建線程池。如果你在main函數(shù)退出的時候沒有調(diào)用
log4cplus::deinitialize();
則線程池中的線程不會退出。導(dǎo)致main函數(shù)無法退出。所以要在main函數(shù)退出之前調(diào)用這句話,如果不調(diào)用,那個log4cplus::Initializer m_initializer;只負(fù)責(zé)調(diào)用shutdown,而不負(fù)責(zé)調(diào)用clearThreadPool。只有l(wèi)og4cplus::deinitialize();才會既clearThreadPool又shutdown。
可以單獨(dú)封裝一個接口,類似如下:
void close() {log4cplus::deinitialize(); }然后在主程序main函數(shù)return之前調(diào)用該函數(shù)即可,如下為Qt程序下的main函數(shù):
int main(int argc, char *argv[]) {QApplication a(argc, argv);.............. // 應(yīng)用程序其它代碼.............. // 應(yīng)用程序其它代碼.............. // 應(yīng)用程序其它代碼int k = a.exec();close(); // 讓日志庫log4cplus中的線程池等資源退出,否則即使main退出了,但主進(jìn)程依然不會退出return k; }非常詳細(xì)介紹log4cplus的博客:
https://blog.csdn.net/lx_shudong/article/details/48732999
?
總結(jié)
以上是生活随笔為你收集整理的log4cplus导致主进程不能退出问题解决的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS代码查看浏览器页面放大比例
- 下一篇: win10系统一键备份的方法是什么