环境简介:我有一台设备运行一个用 qt 编写的应用程序。它有一个处理数据库操作(SQlite)的主线程和一个用于网络操作(通过3G)的单独线程。主线程事件循环由 QCoreApplication::exec 运行,另一个处理网络操作的线程由 QThread::exec 运行。顺便说一句,套接字线程关联在它启动后会发生变化(例如 moveToThread(socketThreadPtr))
问题简介:主线程忙于一个循环,以便从数据库中选择大约 10k 条记录,该循环大约需要 +30 秒。在网络线程中有一个 15 秒的计时器,它必须在每次到期时发送一条保持活动消息。问题是 timeout() 信号的插槽仅在循环完成后才执行。
到目前为止建立的解决方案(但不令人满意):如果我在选择记录的循环中调用 QCoreApplication::processEvents,问题就解决了,但我想知道是否存在解决方案而不是这种解决方法。
备注:定时器、信号和槽,提供发送保持活动消息的命令当前在主线程中处理(但读/写发生在网络线程中)。另外,我在网络线程上移动了计时器,但得到的结果与在主线程上的结果相同。