在main()即主线程中创建了一个QThread.

将一个worker类移动到新线程.该线程执行worker类的’StartThread’方法.

工人线程:

//header file

class Worker : public QObject

{

Q_OBJECT

public:

Worker(QThread* thread);

public slots:

void StartThread();

void EndThread();

private:

QThread* m_pCurrentThread;

};

// source file

#include "QDebug"

#include "QThread"

#include "worker.h"

Worker::Worker(QThread* thread)

{

m_pCurrentThread = thread;

}

void Worker::StartThread()

{

qDebug() << " StartThread";

while(true)

{

QThread::msleep(1000);

qDebug() << " thread running";

static int count = 0;

count++;

if(count == 10)

{

break;

}

if(m_pCurrentThread->isInterruptionRequested())

{

qDebug() << " is interrupt requested";

// Option 3:

m_pCurrentThread->exit();

}

}

qDebug() << "StartThread finished";

}

void Worker::EndThread()

{

qDebug() << "thread finished";

}

Main.cpp的

#include

#include "worker.h"

#include "QThread"

#include "QObject"

#include "QDebug"

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

QThread* thread = new QThread();

Worker* workerObj = new Worker(thread);

QObject::connect(thread,

SIGNAL(started()),

workerObj,

SLOT(StartThread()));

QObject::connect(thread,

SIGNAL(finished()),

workerObj,

SLOT(EndThread()));

workerObj->moveToThread(thread);

thread->start();

thread->requestInterruption();

QThread::msleep(2000);

qDebug() << "terminate thread";

if(thread->isRunning())

{

// Option 1,2 exit() / quit() used but got same output

thread->exit();

qDebug() << "wait on thread";

thread->wait();

}

qDebug() << " exiting main";

return a.exec();

}

现在,在’StartThread’完成并正常退出线程之前,我想从主线程中停止线程.

用过的,

> thread-> exit()

并在主线程中等待(thread-> wait()).

> thread-> quit()

并在主线程中等待(thread-> wait()).

>’StartThread’中的exit()

预期:

一旦从主线程调用exit()/ quit(),线程执行就应该停止.

实际:

在所有三个实例中,线程一直在运行,完成’StartThread’方法并正常退出.尽管没有调用exit()/ quit().

输出:

StartThread

thread running

is interrupt requested

terminate thread

wait on thread

thread running

is interrupt requested

thread running

is interrupt requested

thread running

is interrupt requested

thread running

is interrupt requested

thread running

is interrupt requested

thread running

is interrupt requested

thread running

is interrupt requested

thread running

is interrupt requested

thread running

StartThread finished

thread finished

exiting main

是否可以在主线程需要时停止/处理线程?

qt 等待线程结束_c – 停止Qt线程:调用exit()或quit()不会停止线程执行相关推荐

  1. Qt调用exit()、quit()不生效问题

    项目场景: 启动器程序检测是否安装了某个软件,安装启动并退出main()程序,调用qApp->exit()主程序无法退出. 原因分析: 由于 QCoreApplication::quit()在事 ...

  2. Java多线程系列(五):线程池的实现原理、优点与风险、以及四种线程池实现

    为什么需要线程池 我们有两种常见的创建线程的方法,一种是继承Thread类,一种是实现Runnable的接口,Thread类其实也是实现了Runnable接口.但是我们创建这两种线程在运行结束后都会被 ...

  3. c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划

    作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...

  4. 【多线程】学习记录七种主线程等待子线程结束之后在执行的方法

    最近遇到一个问题需要主线程等待所有的子线程结束,才能开始执行,统计所有的子线程执行结果,返回,网上翻阅各种资料,最后记录一下,找到七种方案 第一种:while循环 对于"等待所有的子线程结束 ...

  5. c++ 等待子线程结束_?进程、线程、以及它们之间的区别与联系

    一.进程简介 1.1 进程概念的引入 计算机中,CPU是最宝贵的资源,为了提高CPU的利用率,引入了多道程序设计的概念.当内存中多个程序存在时,如果不对人们熟悉的"程序"的概念加以 ...

  6. c主线程如何等待子线程结束 linux_使用互斥量进行同步 - Linux C进程与多线程入门_Linux编程_Linux公社-Linux系统门户网站...

    互斥 简单地理解就是,一个线程进入工作区后,如果有其他线程想要进入工作区,它就会进入等待状态,要等待工作区内的线程结束后才可以进入. 基本函数 (1) pthread_mutex_init函数 原型: ...

  7. Linux 多线程开发-等待线程结束pthread_join

    1.函数原型 int pthread_join(pthread_t pid, void **value_ptr); pid:所等待的线程ID: value_ptr:通常设置为NULL,如果不为NULL ...

  8. java 等待线程结束 框架_深入理解Java多线程与并发框架——线程的状态

    欢迎关注专栏<Java架构筑基>--专注于Java技术的研究与分享!Java架构筑基​zhuanlan.zhihu.comJava架构筑基--专注于Java技术的研究与分享! 后续文章将首 ...

  9. python等待线程结束_python线程join

    几个事实 1 python 默认参数创建线程后,不管主线程是否执行完毕,都会等待子线程执行完毕才一起退出,有无join结果一样 2 如果创建线程,并且设置了daemon为true,即thread.se ...

最新文章

  1. recyclerview的onBindViewHolder中if之后要写else,否则可能显示有问题
  2. mysql status改变_mysql 配置详解mysql SHOW STATUS 详解
  3. Android JNI 和 NDK
  4. 【二分法】- leetcode
  5. 与孩子一起学编程14章
  6. qxdm无法安装问题闪一下_Qualcomm QXDM
  7. 常见(MySQL)面试题(含答案)
  8. wpsppt放映时间_wps ppt如何制作时间倒计时
  9. 在线直播系统源码,数组遍历提取,订单效果
  10. vm虚拟化服务器杀毒,VMware服务器虚拟化平台应急方案
  11. word中写出打对号的框
  12. FRM 风险管理基础:复习提纲二
  13. SonarQube 初探
  14. 在Visual Studio代码内部调试节点应用
  15. iPhone 14 Pro Max 和 iPhone 14 Pro的区别
  16. html hr线条粗细,html中hr怎么设置粗细
  17. WordPress数据库文章表(字段说明)
  18. 【狂神说】 mysql 自学总结 7~9章
  19. 超融合服务器是什么?和超融合一体机什么区别?
  20. Git是什么?如何用?

热门文章

  1. 并发编程的目的和挑战
  2. oracle河南城建学院实验报告,数据处理实验报告
  3. 没有bug队——加贝——Python 练习实例 29,30
  4. 山东大学 2020级数据库系统 实验七
  5. 【youcans 的 OpenCV 例程200篇】147. 图像分割之孤立点检测
  6. mxnet深度学习(Symbol)
  7. 对于单输入多输出系统matlab,求助!!如何把多输入多输出系统的传函转换为状态空间表达式?...
  8. vb.net提取html网址,如何提取网页代码中指定内容
  9. php cli 编程,php-cli下编程如何分层架构、面向对象、统一入口文件?
  10. 二元一次函数最值问题_初二上学期,一次函数方案设计最值问题,两类题目解题思路不一样...