Qt:在关闭期间线程仍在运行时,qthread被破坏

Nyaruko

我有一堂课:

class centralDataPool : public QObject
{
    Q_OBJECT
public:
    centralDataPool(QObject * parent = 0);
    ~centralDataPool();
    commMonitor commOverWatch;

private:
    QThread monitorThread;
    int totalNum;

signals:
    void createMonitor(int);
};

在其构造函数中,我做到了:

centralDataPool::centralDataPool(QObject* parent) : QObject(parent),totalNum(0)
{
    connect(this, SIGNAL(createMonitor(int)), &commOverWatch, SLOT(createMonitor(int)));
    commOverWatch.moveToThread(&monitorThread);
    monitorThread.start();
}

当我调用此类的析构函数时,收到错误消息:

qthread destroyed while thread is still running

但是,当我尝试在CentralDataPool类的析构函数中终止monitorThread时,

centralDataPool::~centralDataPool()
{
    monitorThread.terminate();
}

我收到内存泄漏。

在销毁其所有者对象期间终止线程的正确方法是什么?

内贾特

您应注意,如果在线程的函数中运行循环,则应显式结束该循环,以正确终止线程。

您可以在类中具有一个成员变量,该成员变量的名称finishThreadtrue在应用程序将要关闭时设置为只需提供一个用于设置值的插槽即可finishThread当您要终止线程时,发出一个与true连接到该插槽的信号finishThread设置为时,应在循环条件中提供该条件以使其终止true之后,等待线程正常完成几秒钟,如果线程未完成,则强制其终止。

因此,您可以使用析构函数:

emit setThreadFinished(true); //Tell the thread to finish
monitorThread->quit();
if(!monitorThread->wait(3000)) //Wait until it actually has terminated (max. 3 sec)
{
    monitorThread->terminate(); //Thread didn't exit in time, probably deadlocked, terminate it!
    monitorThread->wait(); //We have to wait again here!
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

QThread:线程仍在运行时被破坏了吗?

来自分类Dev

QThread:当线程仍在Python中运行时被破坏

来自分类Dev

退出时“ QThread:线程仍在运行时被销毁”

来自分类Dev

PySide2 QThread错误:QThread:线程仍在运行时被销毁

来自分类Dev

从Windows cmd或IDLE而不是从PyCharm运行时出现“ QThread:线程仍在运行时被销毁”的问题?

来自分类Dev

QThread:在线程仍在QTest中运行时销毁

来自分类Dev

C#-在创建新控件的线程仍在运行时关闭表单

来自分类Dev

PyQt5:线程仍在运行时被销毁

来自分类Dev

当机器(笔记本电脑)风扇仍在运行时,Ubuntu关闭

来自分类Dev

Qt QThread运行时立即失败

来自分类Dev

Qt避免警告'QProcess:在进程仍在运行时销毁

来自分类Dev

如何在主线程仍在运行时使用线程运行另一个 JFrame

来自分类Dev

在程序仍在运行时,如何查看nohup文件?

来自分类Dev

进程仍在运行时如何退出Powershell?

来自分类Dev

在进程仍在运行时旋转日志文件

来自分类Dev

在程序仍在运行时,如何查看nohup文件?

来自分类Dev

嵌套函数仍在运行时暂停外部函数

来自分类Dev

PyQt线程在窗口关闭后仍在运行

来自分类Dev

在运行时ssrs期间创建多个图表

来自分类Dev

Javascript关闭行为在运行时很奇怪

来自分类Dev

是否可以在运行时关闭JsonIgnore属性?

来自分类Dev

Javascript关闭行为在运行时很奇怪

来自分类Dev

如何在运行时关闭特定的骆驼路线?

来自分类Dev

在运行时获取线程数(HEC)

来自分类Dev

带有code :: blocks的线程在运行时出错

来自分类Dev

如果在其他线程仍在运行时调用exit(0),会发生什么情况?

来自分类Dev

运行命令行进程并在该进程仍在运行时获取输出?

来自分类Dev

当主线程仍在python中运行时,如何使用线程获取实时用户输入

来自分类Dev

在Java仍在运行时重新创建日志文件

Related 相关文章

  1. 1

    QThread:线程仍在运行时被破坏了吗?

  2. 2

    QThread:当线程仍在Python中运行时被破坏

  3. 3

    退出时“ QThread:线程仍在运行时被销毁”

  4. 4

    PySide2 QThread错误:QThread:线程仍在运行时被销毁

  5. 5

    从Windows cmd或IDLE而不是从PyCharm运行时出现“ QThread:线程仍在运行时被销毁”的问题?

  6. 6

    QThread:在线程仍在QTest中运行时销毁

  7. 7

    C#-在创建新控件的线程仍在运行时关闭表单

  8. 8

    PyQt5:线程仍在运行时被销毁

  9. 9

    当机器(笔记本电脑)风扇仍在运行时,Ubuntu关闭

  10. 10

    Qt QThread运行时立即失败

  11. 11

    Qt避免警告'QProcess:在进程仍在运行时销毁

  12. 12

    如何在主线程仍在运行时使用线程运行另一个 JFrame

  13. 13

    在程序仍在运行时,如何查看nohup文件?

  14. 14

    进程仍在运行时如何退出Powershell?

  15. 15

    在进程仍在运行时旋转日志文件

  16. 16

    在程序仍在运行时,如何查看nohup文件?

  17. 17

    嵌套函数仍在运行时暂停外部函数

  18. 18

    PyQt线程在窗口关闭后仍在运行

  19. 19

    在运行时ssrs期间创建多个图表

  20. 20

    Javascript关闭行为在运行时很奇怪

  21. 21

    是否可以在运行时关闭JsonIgnore属性?

  22. 22

    Javascript关闭行为在运行时很奇怪

  23. 23

    如何在运行时关闭特定的骆驼路线?

  24. 24

    在运行时获取线程数(HEC)

  25. 25

    带有code :: blocks的线程在运行时出错

  26. 26

    如果在其他线程仍在运行时调用exit(0),会发生什么情况?

  27. 27

    运行命令行进程并在该进程仍在运行时获取输出?

  28. 28

    当主线程仍在python中运行时,如何使用线程获取实时用户输入

  29. 29

    在Java仍在运行时重新创建日志文件

热门标签

归档