可以使用QRunnable替代QtConcurrent来指向某些代码:我在Qtdoc中找不到任何QRunnable示例。

您是否曾经针对同一应用程序尝试过QRunnable和QtConcurrent,并且可以对比较的性能发表评论吗?

最佳答案

QRunnable是一个接口(interface)。因此,与其寻找“一个QRunnable示例”,不如寻找“一个QThreadPool示例”,例如:

http://doc.qt.io/qt-4.8/thread-basics.html#example-1-using-the-thread-pool

如果您在该页面上进一步阅读,它会提到QtConcurrent中的实际值,即执行与将STL算法应用于STL容器类似的操作时的值。当您只需要执行许多完全不相关的任务时,将线程池与QRunnable结合使用会更好。

QtConcurrent建立在QThreadPool之上。从概念上讲,它很方便,使您不必自己编写模式,但本质上不会加快您处理代码的速度。但是...关于QtConcurrent模式(例如MapReduce)的思考可能会帮助您看到您原本不会想到的并行性的机会,并且编写更少的代码意味着更容易尝试替代方法并比较它们的性能。

10-08 12:51