QThreadを強制終了/キャンセルしようとしています。https://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/の実装に従いました
次のように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();
}
私の問題は、スレッドでquitを呼び出した後、スレッドが実行を継続することです。つまり、APIの計算が停止しません。ワーカーはAPIを呼び出すだけなので、ワーカーループでキャンセルチェックを行うことはできません。何か案は?
前もって感謝します!