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

标签 c++ qt

我正在编写一个 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/

相关文章:

c++ - 从源代码编译 Inkscape 时出错

c++ - 如何比较if语句中的字符串?

xcode - 由于 XCode 更新到版本 6,无法启动 QtCreator 调试器

python - 如何在pyqt中正确保存和恢复复选框

c++ - QFileDialog:选择目录和文件

c++ - 如何在QTabWidget标题中设置QWidget?

c++ - CreateProcess() 编译错误?

c++ - QThreadPool在qt cpp中强制停止

c++ - 在 main() 之前调用 void 函数

c - 如何将纬度和经度转换为像素