QFuture与std::future 异步调用样例

实现场景:

前端维护一个进度条,后端进行异步调用,查询状态。为防止用户界面被阻塞故采用异步操作调用。

std::future 可以理解为一个轻型Thread

std::future 相对于QtConcurrent ,std::future不要求传入函数必须为static声明,这大大提高了灵活性。

参考链接:std::future<T>::wait_for - cppreference.com

代码实现:

复制代码
    QProgressDialog *m_pProgressDialog =
        new QProgressDialog(tr("Checking..."),tr("Cancel"),0,0,this);
    m_pProgressDialog->show();


    /*检测目标平台与填写的是否一致*/
    std::future<bool>  ans = std::async(/*std::launch::async,*/[&](){
        return CheckWorkPlatForm();
    });

    std::future_status status=ans.wait_for(std::chrono::milliseconds(50));

    while(status!=std::future_status::ready){

        status=ans.wait_for(std::chrono::milliseconds(50));

        //刷新绘制窗口
        QApplication::processEvents();
    }

    if(m_pProgressDialog->wasCanceled()){
        return;
    }
复制代码

拓展:QThread 的一个轻型调用

 QThread *thread = QThread::create([&i](){
        for(;i<1000;i++){
            qDebug() << "Hello from thread" << QThread::currentThread();
        }
    });

 补充说明:

经测试上述调用会引发Qt的未知异常,在成应用程序闪退,异常又将其修改回使用Qt官方类 QFuture。尚不明确引发问题的原因。

posted @   BlackSnow  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示