2010-08-16 76 views
0

我有一個問題。如果我調用Abort(),運行函數將返回沒有complexMath實例的時間有足夠時間進行清理。在調用quit()後清理QThread

我想要的是,在調用Abort()之後,complexMath實例有足夠的時間關閉它自己,在它返回之前清除所有待處理的信號和插槽(在complexMath中,它也有它自己的信號和插槽)。

void MyThread::Go(){ 
    start(); 
} 

void MyThread::Abort(){ 
    emit stopNow(); 
    quit(); 
} 

void MyThread::run(){ 
    ComplexMath * complexMath = new ComplexMath(); 
    connect(complexMath, SIGNAL(OnCalculation(qint)), this, SLOTS(PartialOutput(qint))); 
    connect(this, SIGNAL(stopNow()), complexMath, SLOTS(deleteLater()); 
    exec(); 
} 

void MyThread::PartialOutput(qint data){ 
    qDebug() << data; 
} 

謝謝!

回答

0

我想你可以擺脫stopNow信號:

void MyThread::Abort(){ 
    quit(); 
} 

void MyThread::run(){ 
    ComplexMath * complexMath = new ComplexMath(); 
    connect(complexMath, SIGNAL(OnCalculation(qint)), this, SLOTS(PartialOutput(qint))); 
    exec(); 
    // Any code here will be run after the thread quits, and the event loop stops 
    deleteLater(); 
}