我試圖殺死/取消QThread。我跟着的https://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/Qt - 如何殺死QThread
執行我創建QThread的是這樣的:
workerThread = new QThread();
ImageProcessor* worker = new ImageProcessor();
worker->moveToThread(workerThread);
connect(workerThread, SIGNAL(started()), worker, SLOT(process()));
connect(worker, SIGNAL(finished()), workerThread, SLOT(quit()));
connect(worker, SIGNAL(finished()), worker, SLOT(deleteLater()));
connect(workerThread, SIGNAL(finished()), workerThread, SLOT(deleteLater()));
workerThread->start();
,並嘗試通過調用來阻止它在一定的UI事件:
workerThread->quit();
我的工作人員是這樣的:
class ImageProcessor : public QObject
{
Q_OBJECT
public:
explicit ImageProcessor(QObject *parent = 0);
~ImageProcessor();
signals:
void finished();
public slots:
void process();
private:
//...
};
其中進程調用API的計算量很大
void ImageProcessor::process()
{
// API call...
emit finished();
}
我的問題是,在調用線程退出後,線程繼續運行,即API的計算不停止。由於工作人員只調用API,因此無法在工作循環中使用取消檢查。有任何想法嗎?
在此先感謝!
看看這個答案 - http://stackoverflow.com/questions/14092915/qt-qthread-exclusively-for-object/14178944#14178944,它可能是你 –