Qt中控制一个线程暂停和启动,以及中途停止一个线程的方法

本文详细介绍了在Qt中如何使用QMutex类控制线程的暂停与重启,以及三种有效的线程停止方法:利用quit或exit(0)、使用terminate、以及利用volatile标志位控制线程运行状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要线程停止的目的:

有时开启一个线程是为了把耗时的操作转移到线程中执行,主进程中可以执行其它的任务,避免了因为大量的重复性操作导致主进程阻塞。

控制线程暂停的方法:

线程的同步用到了QMutex类,作为一个互斥锁控制进行保护。如果在主进程中把线程里面的互斥锁获取,那么线程中再次获取该锁就会失败,引起线程阻塞,主进程执行操作结束后,释放该锁,线程就会再次启动。以上思路实现了线程的暂停和开启。

具体实现代码:

1、线程中代码框架

void thread::run(){
    mutex.lock();    //获得锁
    /*********/
    /........../
    mutex.unlock();  //释放锁
}

2、主进程中代码

void mainwindows::doSomething(){
    thread.mutex.lock();
    /*****************/
    thread.mutex.unlock();
}

中途停止线程的方法

Qt线程的停止可通过三种方式实现:

1、利用quit(或者exit(0))

this.quit();

2、使用terminate

this.terminate();

this.wait();

3、利用volatile

        一种是使用标志位,这种方法最好,在while循环中使用标志位判断是否满足进行循环的条件,并在run函数结束时将stoped置为初始化的值false。(stop定义:volatile bool stopped)

第三中方法线程还在运行,只不过运行的内容是空的。

测试第二中方法可以实现中途停止线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值