gpt4 book ai didi

c++ - qInstallMessageHandler成功,但子线程看不到

转载 作者:行者123 更新时间:2023-12-03 12:50:31 25 4
gpt4 key购买 nike

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

现在我已经完成了原型(prototype),我想清理一些东西,所以我将对 qInstallMessageHandler 的调用移至父级(这看起来更干净),但现在只有父级使用消息处理程序但子线程似乎没有注意到它已安装。我不明白为什么这不起作用。 QMessageHandler 是应用程序范围。实际的消息处理程序代码位于任何类之外(一如既往)。

任何人都可以提供有关为什么线程看不到我的处理程序的任何见解吗?

最佳答案

事情就是这样。我的父进程是一个守护进程(QtService),它试图安装自己的消息处理程序(因为我为它定义了调试)。当我从线程内调用消息处理程序时,我从 qservice 中窃取了处理程序,但是当我将其移动到适当的守护进程中时,qservice 从我那里窃取了处理程序。无论如何,我只是像往常一样踩着自己的脚趾。谁最后调用 qInstallMessageHandler 就获胜。

关于c++ - qInstallMessageHandler成功,但子线程看不到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30735927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com