我正在编写一个Windows DLL,可能在QApplication下运行,也可能在常规Win32应用程序下运行。我想使用Qt网络类,这需要一个事件循环。
如果在常规Win32(非Qt)应用程序中运行,则必须启动QThread或QEventLoop以使Qt网络信号和槽正常工作。注意:DLL使用QtWinMigrate。 但如果在QApplication中运行,则已经存在一个事件循环,无需启动新的QThread。
有没有一种方法可以检查现有的QEventLoop?
澄清: 该DLL运行在大型遗留代码库下,我的类所在的线程可能是或可能不是QThread。
如果在常规Win32(非Qt)应用程序中运行,则必须启动QThread或QEventLoop以使Qt网络信号和槽正常工作。注意:DLL使用QtWinMigrate。 但如果在QApplication中运行,则已经存在一个事件循环,无需启动新的QThread。
有没有一种方法可以检查现有的QEventLoop?
澄清: 该DLL运行在大型遗留代码库下,我的类所在的线程可能是或可能不是QThread。
QApplication::instance
是否存在吗? - peppeQThread
都有一个事件循环,所以这里的重要问题是它是否正在运行。也许可以用isRunning()
来判断? - dtechbool QEventLoop::isRunning() const
,如果事件循环正在运行,则返回true;否则返回false。从调用exec()到调用exit()之间的时间被认为是事件循环正在运行。问题是,你能访问事件循环吗? - MichaelQThread
,为什么要费力检测你的代码当前是在QThread
还是其他(非 Qt)事件循环中运行?如果可以创建QThread
,无论当前运行的事件循环类型如何,都应该创建它。 - Oleg Andriyanov