停止线程的方法是啥(当我直接从 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 继承时)?的主要内容,如果未能解决你的问题,请参考以下文章