Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ qInstallMessageHandler成功,但子线程可以';我看不出来_C++_Qt5 - Fatal编程技术网

C++ qInstallMessageHandler成功,但子线程可以';我看不出来

C++ qInstallMessageHandler成功,但子线程可以';我看不出来,c++,qt5,C++,Qt5,我有一个用Qt5编写的应用程序。有一个父进程,它派生出一系列子线程——工作正常。当我对它进行原型设计时,我安装了自己的消息处理程序(使用qInstallMessageHandler)来定制日志记录,但我在剥离的每个线程中调用安装消息处理程序(实际上线程是彼此的小克隆,因此创建的每个线程都有安装消息处理程序的调用)。奇怪的是,这起作用了。尽管一个应用程序只应该调用一次qInstallMessageHandler(只有一个应用程序可以拥有power环),但多次调用显然是有效的,因为它们都是为同一个处

我有一个用Qt5编写的应用程序。有一个父进程,它派生出一系列子线程——工作正常。当我对它进行原型设计时,我安装了自己的消息处理程序(使用
qInstallMessageHandler
)来定制日志记录,但我在剥离的每个线程中调用安装消息处理程序(实际上线程是彼此的小克隆,因此创建的每个线程都有安装消息处理程序的调用)。奇怪的是,这起作用了。尽管一个应用程序只应该调用一次
qInstallMessageHandler
(只有一个应用程序可以拥有power环),但多次调用显然是有效的,因为它们都是为同一个处理程序调用的。所有线程都将其
qDebug
qWarning
等)消息发送给我的处理程序,父线程也是如此

现在我正在完成原型,我想清理一下,所以我将调用
qInstallMessageHandler
移动到父线程中(看起来更干净),但现在只有父线程使用消息处理程序,而子线程似乎忘记了它已安装。我不明白为什么这不起作用。
QMessageHandler
是应用范围。实际的消息处理程序代码在任何类之外(一直如此)


有人能解释为什么线程看不到我的处理程序吗?

那么就这样吧。我的父进程是一个守护进程(QtService),它试图安装自己的消息处理程序(因为我为它定义了调试)。当我从线程中调用消息处理程序时,计时是这样的,以至于我从qservice中偷走了处理程序,但是当我将其移动到守护进程中时,qservice从我这里偷走了处理程序。不管怎样,我只是像往常一样自食其果。最后一个打电话的人获胜