ある時点で一連のビデオを処理する Qt でアプリケーションを開発しています。正常に動作しますが、プロセス段階での CPU 使用率は 40 ~ 60% しかなかったので、マルチスレッドにしようとしました。
私はQtConcurrentを使用して、より伝統的なスレッド管理の代わりに彼の「高レベル」を引き起こしました。私のコードは単純です:
for(int i = 0; i < totalVideos; i++)
{
QFuture<ResultClass *> futureToken = QtConcurrent::run(this, process, listOfVideos.takeFirst());
QFutureWatcher<ResultClass *>* fw = new QFutureWatcher<ResultClass *>();
connect(fw, SIGNAL(finished()), this, SLOT(manageResult));
fw->setFuture(futureToken);
}
aaaand それは動作し、CPU 使用率は 100% で、約 25 ~ 30% 高速です。ただし、約 65 の新しいスレッドが生成され (25 または 250 のビデオを処理するかどうかに関係なく)、それらのスレッドのほとんどはプロセス フェーズの後も消えません。
私の質問は次のとおりです。このアプローチは正しいですか? 生すぎない?スレッドの作成を「手動で」制御する必要がありますか? QtConcurrent モジュールがすべてを処理するので、スレッド管理を気にする必要はありませんか? 85 スレッドは多すぎますか? プロセス段階の後にそれらのいくつかを殺そうとする必要がありますか??
アクティビティモニターを見るだけで、すべての観察が行われました。
前もって感謝します。