我正在编写一个可以在QApplication下运行的Windows DLL,或者可以在常规的Win32应用程序下运行.我想使用需要事件循环的Qt Networking类.
如果在常规的Win32(非Qt)应用程序中运行,我必须启动QThread或QEventLoop以使Qt网络信号和插槽工作.注意:DLL使用QtWinMigrate. 但是如果在QApplication中运行,则会有一个事件循环,而不需要启动新的QThread.
有没有办法检查现有的QEventLoop?
澄清 DLL在大型遗留代码库下运行,我的类运行的线程可能是也可能不是QThread.
回答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)
见文档.