C++ qInstallMessageHandler成功,但子线程可以';我看不出来
我有一个用Qt5编写的应用程序。有一个父进程,它派生出一系列子线程——工作正常。当我对它进行原型设计时,我安装了自己的消息处理程序(使用C++ qInstallMessageHandler成功,但子线程可以';我看不出来,c++,qt5,C++,Qt5,我有一个用Qt5编写的应用程序。有一个父进程,它派生出一系列子线程——工作正常。当我对它进行原型设计时,我安装了自己的消息处理程序(使用qInstallMessageHandler)来定制日志记录,但我在剥离的每个线程中调用安装消息处理程序(实际上线程是彼此的小克隆,因此创建的每个线程都有安装消息处理程序的调用)。奇怪的是,这起作用了。尽管一个应用程序只应该调用一次qInstallMessageHandler(只有一个应用程序可以拥有power环),但多次调用显然是有效的,因为它们都是为同一个处
qInstallMessageHandler
)来定制日志记录,但我在剥离的每个线程中调用安装消息处理程序(实际上线程是彼此的小克隆,因此创建的每个线程都有安装消息处理程序的调用)。奇怪的是,这起作用了。尽管一个应用程序只应该调用一次qInstallMessageHandler
(只有一个应用程序可以拥有power环),但多次调用显然是有效的,因为它们都是为同一个处理程序调用的。所有线程都将其qDebug
(qWarning
等)消息发送给我的处理程序,父线程也是如此
现在我正在完成原型,我想清理一下,所以我将调用qInstallMessageHandler
移动到父线程中(看起来更干净),但现在只有父线程使用消息处理程序,而子线程似乎忘记了它已安装。我不明白为什么这不起作用。QMessageHandler
是应用范围。实际的消息处理程序代码在任何类之外(一直如此)
有人能解释为什么线程看不到我的处理程序吗?那么就这样吧。我的父进程是一个守护进程(QtService),它试图安装自己的消息处理程序(因为我为它定义了调试)。当我从线程中调用消息处理程序时,计时是这样的,以至于我从qservice中偷走了处理程序,但是当我将其移动到守护进程中时,qservice从我这里偷走了处理程序。不管怎样,我只是像往常一样自食其果。最后一个打电话的人获胜