qt的concurrent::run(),qthread,和std::async对比

QtConcurrent与std::async有何异同

同:
同样支持future来获取结果或异常,

异:
qt框架没有提供promise来获取普通线程的返回值,多使用信号槽
qt使用watchFuture来监视线程完成,标准库可以使用wait_for()来异步等待

QtConcurrent有什么问题
不能使用信号槽
封装程度高,不太灵活,无法精细的控制(线程优先级,线程同步),
调试困难
性能问题,如果是多个小任务,性能比不上继承qthread

QtConcurrent有什么问题

如果存在死锁,线程同步问题的话,调试比较困难
不够灵活,缺乏更细力度的控制,不能对线程优先级,线程同步进行控制
性能问题,如果有较多的小人物,可可能会有线程切换,性能降低

QtConcurrent与std::async有何异同

同样支持获取结果,异常

QtConcurrent使用qfuture和qwatchfuture,qwatchfuture的finish槽函数中处理完成
std::async调用future.get阻塞式获取结果,wait_for允许你以非阻塞的方式检查异步任务的状态
futureResult.wait_for(std::chrono::milliseconds(500)) != std::future_status::ready

标准库提供promise作为参数传入thread来获取结果或异常future=promise.get(),promise.set(val),future.get();

posted on 2025-02-24 11:57  不败剑坤  阅读(314)  评论(0)    收藏  举报

导航