在退出应用程序上安全退出Qt线程

马汉

我试图为处理该特定类的所有事件的Scanner类创建一个线程,从而释放GUI线程。我在GUI上有一个退出按钮,该按钮仅调用qApp-> quit()退出应用程序,但是我不确定如何处理Scanner类中的线程。退出应用程序时,我在调试日志中看到以下错误。

QThread::wait: Thread tried to wait on itself
QThread::wait: Thread tried to wait on itself
QThread: Destroyed while thread is still running

在Scanner.cpp中(省略其他功能)

Scanner::Scanner() :
{
    this->moveToThread(&m_thread);

    connect(&m_thread, &QThread::finished, this, &QObject::deleteLater);
    connect(this, SIGNAL(StartEnroll()), this, SLOT(StartEnrollment()));

    m_thread.start();
}

Scanner::~Scanner()
{
    m_thread.quit(); // Not sure if this is the correct
    m_thread.wait();
}

在主Window.cpp中(省略其他功能)

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this); 
    connect(ui->ExitButton, SIGNAL(released()), this, SLOT(Quit()));
    connect(&m_scanner, SIGNAL(FinishedEnroll(bool)), this, SLOT(EnrollDone(bool)));
}

void MainWindow::Quit()
{
    close();
    qApp->quit();
}

任何有关如何退出的指针都会安全退出多线程应用程序中的应用程序。

罗比

您需要让Scanner类知道该应用程序正在退出。

将以下行添加到的构造函数中 MainWindow

connect(qApp, SIGNAL(aboutToQuit()), &m_scanner, SLOT(deleteLater()));

更新:

connect(&m_thread, &QThread::finished, this, &QObject::deleteLater);

不应该在构造函数中 Scanner

m_thread.quit(); 
m_thread.wait();

不应该在 Scanner

实际上,m_thread不应Scanner以任何方式参与其中。QThread类并不代表一个线程,它是一个线程管理器,应拥有并从那里创建它的线程控制。

在Qt中有多种使用线程的方法,很多方法没有很好地记录。如果您想使用

workerObject->moveToThread(&thread);
thread.start();

使用线程的方式,m_thread则应成为MainWindow的成员,并且这些函数调用应在其构造函数中进行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

QT应用程序不会退出

来自分类Dev

为什么在应用程序上发出的任何信号都无法正常退出?

来自分类Dev

托盘图标不会在应用程序上立即关闭。在电子中退出

来自分类Dev

如何启动在应用程序退出时未关闭的线程?(Qt C ++)

来自分类Dev

我的Android应用程序的gameLoop线程在退出时崩溃

来自分类Dev

线程执行完毕后如何退出应用程序

来自分类Dev

在流星应用程序上运行ios模拟器时出现错误“命令失败,退出代码为66”

来自分类Dev

如何安全退出lib gdx应用程序?

来自分类Dev

安全退出控制台应用程序?

来自分类Dev

如何安全退出pyqt应用程序python

来自分类Dev

macOS / Qt:禁用应用程序停靠菜单上的“退出”菜单项

来自分类Dev

无法退出应用程序

来自分类Dev

OnBackPressed()退出应用程序

来自分类Dev

在Spring Data应用程序上累积的MongoCleaner线程

来自分类Dev

线程冻结了Android应用程序上的活动

来自分类Dev

在Spring Data应用程序上累积的MongoCleaner线程

来自分类Dev

要求用户在android上按回退出应用程序?

来自分类Dev

如何检测Android上的应用程序退出?

来自分类Dev

如何检测Android上的应用程序退出?

来自分类Dev

如何从Windows 10上卡住的全屏应用程序退出?

来自分类Dev

在Windows上阻止stdin时退出应用程序

来自分类Dev

AWS 上 Node 应用程序的 Docker 退出状态 1

来自分类Dev

同时在QT应用程序上播放多个视频

来自分类Dev

尽管按下返回按钮退出应用程序,第二个活动仍在处理程序上开始

来自分类Dev

GUI应用程序退出时退出QThread

来自分类Dev

如何退出android NDK应用程序

来自分类Dev

Android应用程序未退出

来自分类Dev

如何退出Android应用程序?

来自分类Dev

Java RMI应用程序未退出

Related 相关文章

  1. 1

    QT应用程序不会退出

  2. 2

    为什么在应用程序上发出的任何信号都无法正常退出?

  3. 3

    托盘图标不会在应用程序上立即关闭。在电子中退出

  4. 4

    如何启动在应用程序退出时未关闭的线程?(Qt C ++)

  5. 5

    我的Android应用程序的gameLoop线程在退出时崩溃

  6. 6

    线程执行完毕后如何退出应用程序

  7. 7

    在流星应用程序上运行ios模拟器时出现错误“命令失败,退出代码为66”

  8. 8

    如何安全退出lib gdx应用程序?

  9. 9

    安全退出控制台应用程序?

  10. 10

    如何安全退出pyqt应用程序python

  11. 11

    macOS / Qt:禁用应用程序停靠菜单上的“退出”菜单项

  12. 12

    无法退出应用程序

  13. 13

    OnBackPressed()退出应用程序

  14. 14

    在Spring Data应用程序上累积的MongoCleaner线程

  15. 15

    线程冻结了Android应用程序上的活动

  16. 16

    在Spring Data应用程序上累积的MongoCleaner线程

  17. 17

    要求用户在android上按回退出应用程序?

  18. 18

    如何检测Android上的应用程序退出?

  19. 19

    如何检测Android上的应用程序退出?

  20. 20

    如何从Windows 10上卡住的全屏应用程序退出?

  21. 21

    在Windows上阻止stdin时退出应用程序

  22. 22

    AWS 上 Node 应用程序的 Docker 退出状态 1

  23. 23

    同时在QT应用程序上播放多个视频

  24. 24

    尽管按下返回按钮退出应用程序,第二个活动仍在处理程序上开始

  25. 25

    GUI应用程序退出时退出QThread

  26. 26

    如何退出android NDK应用程序

  27. 27

    Android应用程序未退出

  28. 28

    如何退出Android应用程序?

  29. 29

    Java RMI应用程序未退出

热门标签

归档