Я разрабатываю приложение на Qt, которое в какой-то момент обрабатывает кучу видео. Он работает нормально, но на этапе процесса у него было только 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);
}
ааа и он работает, 100% использование процессора и примерно на 25-30% быстрее. Но он порождает около 65 новых потоков (независимо от того, обрабатывает ли он 25 или 250 видео), и большинство из этих потоков не исчезают после фазы процесса.
Мой вопрос: правильный ли этот подход? Он слишком сырой? Должен ли я управлять созданием потока «вручную»? Обо всем позаботится модуль QtConcurrent, поэтому мне не нужно заботиться об управлении потоками? 85 потоков слишком много? Должен ли я попытаться убить некоторых из них после фазы процесса?
Все наблюдения производились только при просмотре монитора активности.
Заранее спасибо.
this
уничтожается до завершения будущего (добавьте это в конструктор, чтобы исправить это) - person ratchet freak   schedule 14.11.2013