【发布时间】:2016-01-14 20:38:52
【问题描述】:
我正在编写一个 Windows DLL,它可以在 QApplication 下运行,或者可以在常规 Win32 应用程序下运行。我想使用需要事件循环的 Qt Networking 类。
如果在常规 Win32(非 Qt)应用程序中运行,我必须启动 QThread 或 QEventLoop 才能使 Qt 网络信号和插槽工作。 注意:DLL 使用 QtWinMigrate。 但是如果在QApplication中运行,已经有事件循环了,不需要再启动一个新的QThread。
有没有办法检查现有的 QEventLoop?
澄清 DLL 在大型遗留代码库下运行,运行我的类的线程可能是也可能不是 QThread。
【问题讨论】:
-
如果需要的话,你真的应该强制 DLL 的用户启动一个线程......
-
你不能检查
QApplication::instance是否存在吗? -
似乎所有
QThreads 都有一个事件循环,所以这里最大的问题是它是否正在运行。也许isRunning()? -
我刚刚对问题进行了澄清。 QApplication::instance 存在,因为我们使用的是 QtWinMigrate。但是我的类可能在非 QThread 工作线程中运行并且没有事件循环。这有意义吗?抱歉,我仍在努力解决它。也许没关系,我应该总是启动一个新的 QThread?
-
有一个函数:
bool QEventLoop::isRunning() const,如果事件循环正在运行,返回true;否则返回假。事件循环被认为是从调用 exec() 到调用 exit() 开始运行。 问题是,你能访问事件循环吗?