Qt Concurrent或std :: async的新代码?

时间:2014-04-21 09:04:42

标签: c++ qt c++11 std qtconcurrent

我正在考虑运行异步代码的两个选项:Qt Concurrentstd::async。鉴于我正在使用Qt编写GUI应用程序,因此使用Qt Concurrent是有意义的。然而,std::async似乎也很好,并得到所有主要编译器的支持。

我应该使用Qt Concurrent或std::async来获取新代码吗?比较两者时我还应该寻找什么?

2 个答案:

答案 0 :(得分:7)

  

鉴于我正在使用Qt编写GUI应用程序,因此使用Qt Concurrent是有意义的

我想说,这不是那么简单。我会尽可能多地使用标准库。但是,有一些限制要考虑到:

  

您是否需要在不支持C ++ 11的平台上支持您的软件?

如果问题是肯定的,那么在基于Qt的软件中使用Qt解决方案是更好的选择。话虽如此,即使是这样,您也可以根据需要选择不同的Qt解决方案。一个是来自KDE的线程编织者,但是现在让我们不要那么远......

另一个问题,你可以问自己:

  

您是否已经拥有现有代码库?

根据答案,这也可以为决策提供进一步的方面,无论您是喜欢一致性还是前瞻性思维。

此处还有另一个问题:

  

我需要多少QtConcurrent?

根据确切的答案,它可能是也可能不是更好的选择。请注意,并非QtConcurrent的每个功能都在标准库中,例如具有Qt信号槽机制的QFutureWatcher

所以,是的,作为Qt用户,我建议尽可能使用标准库。如今,Qt甚至明确依赖于它们,因此不会在不支持它的平台上运行。此外,总体方向似乎在Qt项目中正确。例如,很多东西在QtAlgorithms中被淘汰了,但这只是其中之一。

答案 1 :(得分:3)

Qt Concurrent允许您使用QtConcurrent::run()在另一个线程中运行一个函数。所以我认为你只能将QtConcurrent::run()std::async进行比较。

Qt Concurrent非常复杂,并且具有许多有用的功能。它包含用于并行列表处理的API,并允许您创建多线程程序,而无需使用低级线程原语(如互斥锁或信号量)。它还根据可用的处理器核心数调整使用的线程数。

我认为使用Qt Concurrent非常酷,因为它具有高级API和易用性。