我有一个用Qt5编写的应用程序。有一个父流程可以旋转一系列子线程 - 工作正常。当我进行原型设计时,我安装了自己的消息处理程序(使用qInstallMessageHandler)来自定义日志记录,但是我调用了在每个被分离的线程中安装消息处理程序(实际上线程是彼此的小克隆,所以每个线程created有调用安装消息处理程序)。奇怪的是,这很有效。即使qInstallMessageHandler只应该为一个应用程序调用一次(只有一个可以有权力环),多次调用它显然是有效的,因为它们都是同一个处理程序。所有线程都将qDebug(qWarning等)消息发送给我的处理程序,父进程也是如此。
既然我已经完成原型,我想清理一下,所以我将qInstallMessageHandler的调用移到了父(这看起来更干净),但是现在只有父使用消息处理程序,但子线程似乎不知道它是安装的。我不明白为什么这不起作用。 QMessageHandler是应用程序范围。实际的消息处理程序代码在任何类之外(因为它始终是)。
任何人都可以提供有关线程无法看到我的处理程序的任何见解吗?
答案 0 :(得分:0)
所以这就是这笔交易。我的父进程是一个守护进程(QtService),它试图安装自己的消息处理程序(因为我为它定义了调试)。当我从我的线程中调用消息处理程序时,我从qservice中窃取了处理程序,但是当我将它移动到守护程序中时,qservice从我那里偷走了处理程序。无论如何,我像往常一样踩着自己的脚趾。调用qInstallMessageHandler的人最后获胜。