QThread: Destroyed while thread is still running


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM