停止线程的方法是啥(当我直接从 QThread 继承时)?

Posted

技术标签:

【中文标题】停止线程的方法是啥(当我直接从 QThread 继承时)?【英文标题】:What is the way to stop the thread (when I directly inherit from QThread)?停止线程的方法是什么(当我直接从 QThread 继承时)? 【发布时间】:2017-12-14 11:35:22 【问题描述】:

.h

#include <QThread>
#include <QDebug>

class MainWindow : public QThread

    Q_OBJECT

protected:
    void run()
    
        while (1)
        
            qDebug() << "\nsdfdsf";
        
    

public:
    MainWindow(QThread *parent = 0);
    ~MainWindow();
;

.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QThread *parent)
    : QThread(parent)

    start();


MainWindow::~MainWindow()



现在,我知道这是一种使用线程的旧方法。 我想知道在使用方法时停止线程的方法是什么?

请展示示例。

【问题讨论】:

【参考方案1】:

Qt5中有interrupt request (QThread::requestInterruption)可以被线程处理,所以有一种优雅统一的方式让线程停止。

另见this answer。

【讨论】:

怎么称呼它?直接这样:QThread::requestInterruption 是的,然后是QThread::wait(),在线程循环中,检查QThread::isInterruptionRequested()【参考方案2】:

最简单的方法是将while(1) 替换为while(someCondition),其中someCondition 可能代表一个简单的布尔变量、您调用的函数或任何其他适合确定线程是否仍应运行的检查。

【讨论】:

以上是关于停止线程的方法是啥(当我直接从 QThread 继承时)?的主要内容,如果未能解决你的问题,请参考以下文章

在 qthread 中停止长时间运行的进程

在qthread中停止长时间运行的进程

QThread 不会停止/不处理信号

实现 QThread 的正确方法是啥...(请举例...)

g_main_loop_run 阻塞 Qthread 并且不允许停止视频

如何从 GUI 停止 QThread