QT Qthread中止回收

在QT开辟一个QThrea线程时,想要中止并且回收资源,一般这样写:
//退出线程
recThread->quit();
//回收资源
recThread->wait();
delete reciveImageThread;

上面reciveImageThread是自定义的线程类,recThread是QThread类
但在实际操作中,我们在运行一个子线程时,有可能是一个while(1)循环,此时子线程会阻塞在wait()中不能跳出来,这样就无法正常关闭子线程。
一个比较极端的做法是,调用void QThread::terminate(),terminate()会强制中断子线程,但这是比较危险的做法。下面是QT官方的说法:
This function is dangerous and its use is discouraged. The thread can be terminated at any point in its code path. Threads can be terminated while modifying data. There is no chance for the thread to clean up after itself, unlock any held mutexes, etc. In short, use this function only if absolutely necessary.
所以实际操作中,不推荐使用terminate()。

下面推荐一个实际操作中比较好用的做法,设置标志位。
在线程进入while循环时,设置标志位flag,flag为true时才进入循环。平常我们需要子线程运行时,flag置为true,在我们要关闭子线程时,将flag置为false。
//标志
flag = false;
//退出线程
recThread->quit();
//回收资源
recThread->wait();
delete reciveImageThread;

你可能感兴趣的:(C++,QT)