Qt5已經分裝了函數
void QThread::requestInterruption() { Q_D(QThread); QMutexLocker locker(&d->mutex); if (!d->running || d->finished || d->isInFinish) return; if (this == QCoreApplicationPrivate::theMainThread) { qWarning("QThread::requestInterruption has no effect on the main thread"); return; } d->interruptionRequested = true; } bool QThread::isInterruptionRequested() const { Q_D(const QThread); QMutexLocker locker(&d->mutex); if (!d->running || d->finished || d->isInFinish) // 如果線程已經結束就。。。 return false; return d->interruptionRequested; }
在wile中用下面函數判斷
while (!isInterruptionRequested()) { ///// ///// }
在析構函數中調用
ThreadToDisks:: ~ThreadToDisks()
{
requestInterruption();
quit();
wait();
}
一定要先停掉線程run()中的while循環,然后再銷毀指針,否則,就會卡主。
參考:https://blog.csdn.net/u013372900/article/details/80405261