イベントで QtConcurent::map 計算をキャンセルしたいと思います。
これは私のテストコードです(計算は無限ループで表されます):
class Test : public QObject
{
Q_OBJECT
public:
Test(QObject *parent=0) : QObject(parent){}
void test()
{
qDebug() << tr("thread:") << QThread::currentThread();
//computation
while(true);
}
};
テストのリストがあり、次のことを行います。
//QFuture<void> m_concurentResult;
m_concurentResult = QtConcurrent::map(m_collection, &Test::test);
//That's Ok, I have the two outputs :
// QThread(0x4e21f8, name = "Thread (pooled)")
// QThread(0x4e21b8, name = "Thread (pooled)")
目標は、ユーザーがボタンをクリックしたときにすべての計算をキャンセルすることです。
void Widget::on_pushButton_clicked()
{
m_concurentResult.cancel();
m_concurentResult.waitForFinished();
}
しかし、ボタンをクリックすると、UI がフリーズし、何も実行されません。手伝ってくれてありがとう !