首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以确定线程是否有QEventLoop吗?

我可以确定线程是否有QEventLoop吗?
EN

Stack Overflow用户
提问于 2016-01-14 20:38:52
回答 3查看 3.5K关注 0票数 7

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

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

是否有一种检查现有QEventLoop的方法?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-14 21:40:30

答对Qt 5。

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

接下来要做的就是调用QThread::eventDispatcher函数。如果当前线程中没有Qt事件循环,则返回NULL。不幸的是,这个函数只在Qt 5之后才可用。希望在早期版本中还有其他一些方法来获取所需的信息。

顺便说一句,我建议您启动QThread,而不管您的代码是在Qt中运行还是在任何其他事件循环中运行。如果有一种情况,当你需要产卵QThread无论如何,我宁愿总是孕育它。代码少,bug少。

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

代码语言:javascript
复制
QAbstractEventDispatcher::instance()

文档

票数 8
EN

Stack Overflow用户

发布于 2021-05-02 09:41:54

代码语言:javascript
复制
int QThread::loopLevel() const

返回线程的当前事件循环级别。注意:这只能在线程本身内调用,即当它是当前线程时。该功能是在QT5.5中引入的。

票数 2
EN

Stack Overflow用户

发布于 2016-01-14 20:51:37

来自QThread文档

QThread对象管理程序中的一个控制线程。QThreads开始在run()中执行。默认情况下,()通过调用exec()启动事件循环,并在线程.中运行一个Qt事件循环。

因此,当您调用run时,它有一个事件循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34799286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档