我正在考虑运行异步代码的两个选项:Qt Concurrent和std::async
。鉴于我正在使用Qt编写GUI应用程序,因此使用Qt Concurrent是有意义的。然而,std::async
似乎也很好,并得到所有主要编译器的支持。
我应该使用Qt Concurrent或std::async
来获取新代码吗?比较两者时我还应该寻找什么?
答案 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和易用性。