【问题标题】:How to cancel QSqldatabase::open immediately in a running thread?如何在正在运行的线程中立即取消 QSqldatabase::open?
【发布时间】:2020-02-10 22:09:17
【问题描述】:

我有一个线程,它打开一个数据库并发出一个信号。主要思想是检查数据库是否仍然存在并且有效。如果数据库处于离线状态(MYSQL),QSqldatabase 正在尝试连接大约 3 秒。

现在的问题:如果我想关闭线程(因为 UI 窗口已关闭)并且无法访问数据库,我需要等到连接测试完成,然后才能关闭我的线程,然后用户界面。

所以 UI 可以冻结,因为它正在等待线程关闭,而该线程正忙于测试连接。

是否有可能立即中止线程? (我正在使用 Qt Concurrent::run)。

【问题讨论】:

  • 您可以强制线程立即终止:QThread::terminate()
  • 首先,感谢您的评论 :) 看起来这是我正在寻找的一种方法。 Qt Concurrent有没有类似的方法?我更喜欢并发,因为它更容易。 (我不会犯那么多错误)。

标签: qt5 qthread qtconcurrent qsqldatabase


【解决方案1】:

经过几年的经验,我确实知道一个答案:你根本不应该。让它保持打开或终止,但最好的选择是让它运行,完成然后关闭线程。

我设法让线程一直运行,直到测试完成。 UI 可以随时关闭 - 如果忙,数据库线程将跟随。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-02
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    相关资源
    最近更新 更多