C++之std::async

std::async是C++提供的一个异步处理函数。

函数原型:
template<typename _Fn, typename... _Args>

future<__async_result_of<_Fn, _Args...>> async(launch __policy, _Fn&& __fn, _Args&&... __args);

参数说明:

int thFun(int k);

std::future<int> result=std::async(std::launch::async, thFun, 10);

第一个参数是启动策略的设置: launch::async为异步:启用新线程来执行。

launch::deferred:同步执行,还在原来的线程中,对__fn的调用被延迟,直到future使用wait()get()。不调用这future get()wait()将不阻塞程序。

第二个参数:需要执行的函数。

后面参数为执行函数的参数。

返回值:操作结果,定义时候记得数据类型得与执行函数的返回值类型一致。

可以使用futuregetwaitwait_forwait_until等待执行结束,其中get可以获得执行的结果。如果选择launch::async异步执行,调用get时,如果异步执行没有结束,get会阻塞当前调用线程,直到异步执行结束并获得结果,如果异步执行已经结束,直接获得结果;如果选择launch::deferred同步执行,只有当调用get函数时,同步调用的函数才真正执行,否则不执行。

异步调用:

int thFun(int k)

{

    for (int i=0;i<k;i++)

    {

        cout << i<<endl;

        std::this_thread::sleep_for(std::chrono::milliseconds(100));

    }

    return 5;

}

int main()

{

    std::future<int> result=std::async(std::launch::async, thFun, 10);

    std::this_thread::sleep_for(std::chrono::milliseconds(200));

cout << "主函数启动线程结束" << endl;

}

验证异步调用使用了结果get(),阻塞。

std::future<int> result=std::async(std::launch::async, thFun, 10);
    std::this_thread::sleep_for(std::chrono::milliseconds(200));
    result.get();
    cout << "主函数启动线程结束" << endl;

同步调用但是不使用get()

std::future<int> result=std::async(std::launch::deferred, thFun, 10);
    std::this_thread::sleep_for(std::chrono::milliseconds(200));
    cout << "主函数启动线程结束" << endl;

结果验证了不调用get函数是不会执行异步函数的,也就是不会阻塞到调用的线程。

同步调用但是使用get()

std::future<int> result=std::async(std::launch::deferred, thFun, 10);
    std::this_thread::sleep_for(std::chrono::milliseconds(200));
    cout<<"调用结果:"<<result.get() <<endl ;
    cout << "主函数启动线程结束" << endl;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MT8791迅鲲900T联发科5G安卓核心板规格参数_MTK平台方案定制

MT8791安卓核心板是一款搭载了旗舰级配置的中端手机芯片。该核心板采用了八核CPU架构设计&#xff0c;但是升级了旗舰级的Arm Cortex-A78核心&#xff0c;两个大核主频最高可达2.4GHz。配备了Arm Mali-G68 GPU&#xff0c;通过Mali-G88的先进技术&#xff0c;图形处理性能大幅提…

Python 实现 ATR 指标计算(真实波幅):股票技术分析的利器系列(10)

Python 实现 ATR 指标计算&#xff08;真实波幅&#xff09;&#xff1a;股票技术分析的利器系列&#xff08;10&#xff09; 介绍算法解释 代码rolling函数介绍核心代码 完整代码 介绍 ATR&#xff08;真实波幅&#xff09;是一种技术指标&#xff0c;用于衡量市场波动性的程…

Linux--ACL权限管理

一.ACL权限管理简介 ACL&#xff08;Access Control List&#xff0c;访问控制列表&#xff09;是一种文件权限管理机制&#xff0c;它提供了比传统的UGO&#xff08;用户、组、其他&#xff09;权限更灵活的权限设置方式。以下是ACL的一些主要功能&#xff1a; 针对特定用户或…

【Linux】docker构建环境编译运行linux内核

文章目录 1. 使用docker构建linux内核编译运行环境1.1. 为普通用户安装docker并验证是否安装成功1.1.1. 安装docker稳定版1.1.2. 启动docker1.1.3. 将当前用户加入docker用户组1.1.4. 验证docker是否安装成功 1.2. docker基本使用1.2.1. 列出所有镜像1.2.2. 查看当前所有容器的…

pyqt如何实现拖拽打开文件(通过windows的快捷方式打开文件)

桌面端的开发中如何通过windows的快捷方式打开文件&#xff0c;那么如何将需要打开的数据传递给qt程序呢&#xff1f; 研究了一下发现很简单 通过sys.argv可以轻松的实现传参 sys.argv import sys print(sys.argv)这个方法可以获取系统传递给程序的参数&#xff0c;默认是个列…

企业型多域名SSL证书

多域名SSL证书是目前市场上用的比较多的一种&#xff0c;主要解决多个不同规则的域名申请&#xff0c;但不适合主域名&#xff08;根域名&#xff09;相同的域名&#xff0c;因为这种域名直接申请通配符。 企业型其实就是OV类型或者EV类型&#xff0c;由于在CA/B产品名称规范中…

pi(2)

上一次我们说到了这个程序 #include <iostream> #include <cmath> #include <limits> int continuedFractionTerm(int n) { if (n 0) return 1; if (n % 2 0) { return 2 * n 1; } else { return 2 * n; } } std::pair<int, int> be…

jetson nano——安装archiconda

目录 1.archiconda3我在这提供了下载链接&#xff0c;点解下面链接即可1.看好文件所在位置&#xff0c;如果装错了&#xff0c;那么环境变量的路径自己进行相应的修改。2.添加环境变量 2.可能部分伙伴输入一些激活&#xff0c;啥的命令激活不了&#xff0c;那么输入下面这些代码…

深入浅出JVM(八)之类加载器

前文已经描述Java源文件经过前端编译器后变成字节码文件&#xff0c;字节码文件通过类加载器的类加载机制在Java虚拟机中生成Class对象 前文深入浅出JVM&#xff08;六&#xff09;之前端编译过程与语法糖原理重点描述过编译的过程 前文深入浅出JVM&#xff08;三&#xff09…

视频基础学习二——图像深度与格式(RGB与YUV)

文章目录 前言一、图像深度1.什么是图像深度2.图像深度的意义3.常见的图像深度8位16位24位32位 二、图像格式1.RGB格式2.RGB样式2.YUVYUV的来由YUV样式RGB和YUV之间的转换YUV的常见类型 总结 前言 本文的目的是为了梳理音视频基础相关的知识&#xff0c;有很多做流媒体、音视频…

高级语言期末2010级A卷

1.编写函数&#xff0c;按照如下公式计算圆周率π的值&#xff08;精确到1e-5&#xff09; #include <stdio.h>double pai() {double last0;double flag1;int n1;while(flag-last>1e-5) {lastflag;flag*1.0*(2*n)*(2*n)/((2*n-1)*(2*n1));n;}return 2*last; }int main…

基于SpringBoot的停车场管理系统

基于SpringBootVue的停车场管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台首页 停车位 个人中心 管理员界面 摘要 摘要&#xff1a;随着城市化进程的…

C#,计算几何,计算机图形学(Computer Graphics)洪水填充算法(Flood Fill Algorithm)与源代码

1 泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法(Flood Fill Algorithm) &#xff0c;又称洪水填充算法&#xff0c;是在很多图形绘制软件中常用的填充算法&#xff0c;最熟悉不过就是 windows 自带画图软件的油漆桶功能。 2 源程序 using System; using System.Collecti…

windows 虚拟机:CrossOver 24.0.0 for Mac破解版安装激活2024图文教程

CrossOver 24.0.0 for Mac是一款功能强大的虚拟机软件&#xff0c;允许在Mac系统上运行Windows应用程序而无需重新启动计算机。通过CrossOver&#xff0c;用户可以轻松地运行Windows软件和游戏&#xff0c;而无需购买Windows许可证或使用虚拟机。 CrossOver 24.0.0 for Mac通过…

MySQL-基本使用,数据类型,简单操作

1. 数据库概述 1.1 数据库(DatBase) 数据库&#xff0c;就是遵循一定数据格式的数据集合&#xff0c;可以认为他是对文件系统的改进。它解决了不同操作系统之间&#xff0c;数据格式的兼容性问题。也就是说&#xff0c;只要是同一个数据库的数据文件&#xff0c;即使从windows迁…

使用 kind 集群安装运行极狐GitLab Runner【下】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 上一篇内容中&#xff0c;我们已经利用 kind 创建好了一个本地…

GPT-SoVITS 快速声音克隆使用案例:webui、api接口

参考: https://github.com/RVC-Boss/GPT-SoVITS 环境: Python 3.10 PyTorch 2.1.2, CUDA 12.0 安装包: 1、使用: 1)下载项目 git clone https://github.com/RVC-Boss/GPT-SoVITS.git2)下载预训练模型 https://huggingface.co/lj1995/GPT-SoVITS 下载模型文件放到GPT…

C# (WebApi)整合 Swagger

SpringBoot-整合Swagger_jboot整合swagger-CSDN博客 C# webapi 也可以整合Swagger webapi运行其实有个自带的HELP页面 但是如果觉得UI不好看&#xff0c;且没办法显示方法注释等不方便的操作&#xff0c;我们也可以整合Swagger 一、使用NuGet控制台安装Swagger 在菜单中选择…

Pycharm服务器配置与内网穿透工具结合实现远程开发的解决方法

文章目录 一、前期准备1. 检查IDE版本是否支持2. 服务器需要开通SSH服务 二、Pycharm本地链接服务器测试1. 配置服务器python解释器 三、使用内网穿透实现异地链接服务器开发1. 服务器安装Cpolar2. 创建远程连接公网地址 四、使用固定TCP地址远程开发 本文主要介绍如何使用Pych…

力扣随笔之颜色分类(中等75)

思路&#xff1a;定义两个指针划分left&#xff0c;right划分三个区域left左边是红色区域&#xff0c;right右边是蓝色区域&#xff0c;left和right之间是白色区域&#xff1b;定义一个遍历指针遍历整个数组&#xff0c;遇到红色与left所指位置数字交换&#xff0c;并将left自加…