我在 Qt 中开发了一个应用程序,它有时会处理一堆视频。它工作正常,但在进程阶段它只有 40-60% 的 cpu 使用率,所以我试图让它成为多线程的。
我使用 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 它可以工作,100% 的 CPU 使用率和大约 25-30% 的速度。但它会产生大约 65 个新线程(不管它处理 25 或 250 个视频),并且这些线程中的大多数在处理阶段后都不会消失。
我的问题是:这种方法对吗?是不是太生了?我应该“手动”控制线程创建吗?QtConcurrent 模块是否会处理所有问题,所以我不应该关心线程管理?85个线程太多了吗?我应该在流程阶段之后尝试杀死其中一些吗?
只需查看活动监视器即可完成所有观察。
提前致谢。