gpt4 book ai didi

c++ - 我可以确定线程是否具有 QEventLoop 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:11 31 4
gpt4 key购买 nike

我正在编写一个 Windows DLL,它可以在 QApplication 下运行,也可以在常规 Win32 应用程序下运行。我想使用需要事件循环的 Qt Networking 类。

如果在常规 Win32(非 Qt)应用程序中运行,我必须启动 QThread 或 QEventLoop 以使 Qt 网络信号和槽工作。 注意:DLL 使用 QtWinMigrate。但是如果运行在一个QApplication中,已经有一个事件循环,不需要启动一个新的QThread。

有没有办法检查现有的 QEventLoop?

澄清DLL 在大型遗留代码库下运行,我的类运行的线程可能是也可能不是 QThread。

最佳答案

Qt 5 的回答。

你可以通过调用静态函数来获取当前的QThread QThread::CurrentThread .实践告诉我,即使您的程序中没有 QApplication 实例,它也会返回非空指针。

接下来要做的是调用 QThread::eventDispatcher 功能。如果当前线程中没有 Qt 事件循环,它返回 NULL。不幸的是,此功能仅在 Qt 5 之后可用。希望在早期版本中有一些其他方法可以获取所需的信息。

顺便说一句,无论您的代码是在 Qt 还是任何其他事件循环中运行,我都建议您启动 QThread。如果在某种情况下您无论如何都需要生成 QThread,我宁愿始终生成它。更少的代码,更少的错误。

更新:在 Qt 4 中,您可以使用:

QAbstractEventDispatcher::instance()

参见 doc .

关于c++ - 我可以确定线程是否具有 QEventLoop 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34799286/

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