需要线程停止的目的:
有时开启一个线程是为了把耗时的操作转移到线程中执行,主进程中可以执行其它的任务,避免了因为大量的重复性操作导致主进程阻塞。
控制线程暂停的方法:
线程的同步用到了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)
第三中方法线程还在运行,只不过运行的内容是空的。
测试第二中方法可以实现中途停止线程。