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

Mat*_*hew 5 c++ qt

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

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

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

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

Ole*_*nov 8

回答Qt 5.

您可以QThread通过调用静态函数获得最新信息QThread::CurrentThread.实践告诉我,即使QApplication程序中没有实例,它也会返回非空指针.

接下来要做的就是调用QThread::eventDispatcher 函数.NULL如果当前线程中没有Qt事件循环,则返回.不幸的是,这个功能仅在Qt 5开始提供.希望在早期版本中有其他方法可以获得所需的信息.

顺便说一下,QThread无论你的代码是在Qt还是其他任何事件循环中运行,我都建议你开始.如果有需要生成QThread的情况,我总是喜欢生成它.更少的代码,更少的错误.

更新:在Qt 4中你可以使用:

QAbstractEventDispatcher::instance()
Run Code Online (Sandbox Code Playgroud)

文档.