8

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

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

4

2 回答 2

7

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

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

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

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

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

您是否已经拥有一个贯穿始终的代码库?

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

这里还有一个问题要问:

我需要多少 QtConcurrent?

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

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

于 2014-04-21T09:26:02.177 回答
3

Qt Concurrent 允许您使用QtConcurrent::run(). 所以我认为你只能QtConcurrent::run()std::async.

Qt Concurrent 非常复杂并且有很多有用的特性。它包括用于并行列表处理的 API,并允许您创建多线程程序,而无需使用互斥锁或信号量等低级线程原语。它还根据可用的处理器内核数调整使用的线程数。

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

于 2014-04-21T09:48:27.747 回答