で始まるいくつかのタスクがありQtConcurrent::run()
ます。タスクにはQFutureWatcher
. 1 つの Future しかQFutureWatcher
監視できないことはわかっていますが、UI から同じタスクを開始した場合、各タスクで QFutureWatcher* を作成するにはどうすればよいでしょうか? それは...ですか :
QFutureWatcher<void> *watcher = new QFutureWatcher;
watcher->setFuture(future);
QVector<QFutureWatcher<void>*> watchers;
watchers.push_back(watcher); // vector with pointers to each tasks watchers
または、他の何か?
* 問題は、各タスクを自分のコードから開始することですが、タスクは外部 DLL 関数で実行されます。そして、タスクを停止するための API がありません。QFutureWatcher
完了信号を受信した後、タスクが終了するのを待ち、関連するすべてのデータを解放してタスクを閉じることしかできません。
現時点では、2 つの QFutureWatcher を使用します。1 つは最初に実行されたタスクを監視し、もう 1 つは最初のタスクが終了していない場合に開始し、一時ウォッチャーと一時スロットを使用して 2 番目のタスクを監視します (コードは同じです。別のウォッチャーを受け取るためだけに作成します)。最初のタスクが終了するまで、関連するデータを含む信号)。そして、同じコードを監視しましたが、最初のタスクが終了するのを待つために複製する必要があります。これQFutureWatcher
は、終了したシグナルと関連する watcher.result()`s を持つキューがないためです
1) Qt には Queued task メカニズムがありますか? または、どうすれば複数のタスクの先物をキャッチできますか?
2) QtConcurrent::run
cancel() スロットがありません。1 つのシーケンス アイテムで map/mapped 関数を使用できますか? マップされた API には、タスク/終了シグナルのキュー処理がありますか? どうすればそれを理解できますか?どうも!