记录一个std::future和std::async的demo

2023-11-04

Demo和代码简述

// 子线程函数,参数a传进去模拟遇到的带参数问题,函数的返回值可以是处理完的任意值,若有返回值则get()到的就是返回值,比如这个demo里get到的就是3
int TestNoClass(int a);	

int main(int argc, char* argv[])
{
	std::cout << "main_thread_" << std::this_thread::get_id() << std::endl;
	
	// 如果函数TestNoClass没有参数,那么这里的5也就不用写,只传入TestNoClass即可
	std::future<int> fu = std::async(TestNoClass, 5);

	//std::cout << fu.get() << std::endl;	// 打印出来创建的这个线程的返回值

	// 测试一下wait_for(),wait_for()不能和std::future的get()函数一起使用。
	std::future_status status = fu.wait_for(std::chrono::seconds(4));	// 测试等待六秒
    if (status == std::future_status::timeout) {
        std::cout << "child thread timeout" << std::endl;
    }
	return 0;
}

int TestNoClass(int a)
{
	std::cout << "TestNoClass Begin: thread_id" << std::this_thread::get_id() << std::endl;
	std::chrono::seconds duration(1);
	for (size_t i = 0; i < a; i++)
	{
		std::this_thread::sleep_for(duration);
		std::cout << "child_" << std::this_thread::get_id() << " sleep for " << i + 1 << " second" << std::endl;
	}
	return 3;
}

关于std::async的第一个参数

即demo中的这一行代码

std::future<int> fu = std::async(TestNoClass, 5);

在这里插入图片描述

std::async()第一个参数默认是std::launch::async,就是上述的案例中描述的那样,该参数有async和launch两个选项,后者意为等到主线程运行到get()函数时候才会创建子线程,但实际上所谓的子线程与主线程的线程ID是一样的,也就是说并没有创建子线程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

记录一个std::future和std::async的demo 的相关文章

  • 静态只读字符串数组

    我在我的 Web 应用程序中使用静态只读字符串数组 基本上数组有错误代码 我将所有类似的错误代码保存在一个数组中并检查该数组 而不是检查不同常量字符串中的每个错误代码 like public static readonly string m
  • 代码 GetAsyncKeyState(VK_SHIFT) & 0x8000 中的这些数字是什么?它们是必不可少的吗?

    我试图在按下按键的简单动作中找到这些数字及其含义的任何逻辑解释 GetAsyncKeyState VK SHIFT 0x8000 可以使用哪些其他值来代替0x8000它们与按键有什么关系 GetAsyncKeyState 根据文档返回 如果
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 函数参数的默认参数是否被视为该参数的初始值设定项?

    假设我有这样的函数声明 static const int R 0 static const int I 0 void f const int r R void g int i I 根据 dcl fct default 1 如果在参数声明中指
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • C# 存档中的文件列表

    我正在创建一个 FileFinder 类 您可以在其中进行如下搜索 var fileFinder new FileFinder new string C MyFolder1 C MyFolder2 new string
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个

随机推荐

  • SVN经典目录结构说明

    SVN经典目录结构说明 SVN的经典目录包含trunk tags branches trunk trunk是主干 也就是主要工作的地方 也是最新的代码存放的地方 branches branches是分支的意思 分支开发和主线开发是可以同时进
  • MySQL数据库和表基础操作

    目录 一 数据库的基本操作 二 表的基本操作 1 表结构操作 2 表数据操作 CRUD增删查改 一 数据库的基本操作 创建数据库 create database 数据库名 切换数据库 use 数据库名 删除数据库 drop database
  • 服务器conda环境打包迁移 dgl安装 版本问题

    总结 租服务器配好conda环境 把环境迁移到没联网的学校服务器 要注意一定要检查两个服务器的CUDA版本是不是不同的 这可能会带来一些问题 因为CUDA是不在conda环境里面的 最后解决安装dgl版本问题还是采用下载whl文件pip离线
  • ICCV 2023

    本文转载自知乎 mywt 已获得作者授权 文章链接 https arxiv org abs 2211 14710 代码链接 3DPPE on petrv1 v2 https github com drilistbox 3DPPE 3DPPE
  • win10环境Vscode快速配置编译运行C文件

    一 安装并正常运行vscode 下载vscode插件 安装C C 插件和code run插件 二 下载MinGW w64 1 下载地址 https sourceforge net projects mingw w64 2 根据电脑配置选择合
  • SetupDiGetDeviceInterfaceDetail

    SetupDiGetDeviceInterfaceDetail 该函数返回设备接口的详细信息 BOOL SetupDiGetDeviceInterfaceDetail In HDEVINFO DeviceInfoSet In PSP DEV
  • STM32定时器系列 - STM32常规定时器时基与时钟源

    常规定时器包括 基本定时器 通用定时器和高级定时器 基本定时器 没有任何对外输入 输出 主要用作时基计数 定时 通用定时器 除了基本定时器的时基功能外 还可对外做输入捕捉 输出比较以及连接其它传感器接口 编码器和霍尔传感器 高级定时器 此类
  • C语言深入理解指针(非常详细)(一)

    目录 内存和地址 内存 编址的理解 指针变量和地址 取地址操作符 指针变量和解引用操作符 指针变量 如何拆解指针类型 解引用操作符 指针变量的大小 指针变量类型的意义 指针的解引用 指针 整数 const修饰指针 const修饰变量 con
  • 【Mybatis】Mybatis插入中文乱码问题

    1 首先看数据库中和idea中是否都是utf 8编码 1 数据库 新建查询 gt 输入 SHOW FULL COLUMNS FROM 数据库名 表名 查看所有字段编码 2 IDEA 点击File Settings Editor File E
  • 后端开发学习Vue(一)

    Vue的介绍 官网 https cn vuejs org Vue是一个简单容易上手前端框架 例如 下面的代码可以快速构建一个表格
  • rpy2库

    在数据分析中 Python和R各有千秋 虽然Python或R都能在数据分析打通关 从采集 清洗 预处理 分析 可视化 但是在不同的环节 不同的语言易用程度不同 Python胜在干脏活累活 诸如数据采集 数据清洗 机器学习等 而R语言胜在统计
  • 【机器学习】聚类【Ⅰ】基础知识与距离度量

    主要来自周志华 机器学习 一书 数学推导主要来自简书博主 形式运算 的原创博客 包含自己的理解 有任何的书写错误 排版错误 概念错误等 希望大家包含指正 由于字数限制 分成五篇博客 机器学习 聚类 基础知识与距离度量 机器学习 聚类 原型聚
  • 用c语言打印九九乘法表

    分析 这是一个典型的使用循环嵌套的题目 把题目分成两部分 被乘数和乘数 被乘数的变化是从1变化到9 乘数的变化是根据被乘数而来 这样就决定了被乘数的变化做为外循环 乘数的变化作为内循环 1 1 1 2 1 2 2 2 4 3 1 3 3 2
  • 路径遍历(目录遍历)

    一 简介 路径遍历攻击也称为目录遍历 旨在 访问存储在web根文件夹之外的文件和目录 通过操纵带有 点 斜线 序列及其变化的文件或使用绝对路径来引用文件的变量 来访问存储在文件系统上的任意文件和目录 包括应用程序源代码 配置和关键系统文件
  • 中国移动光猫无线路由一体机如何再接另外一个无线路由器

    将无线路由器连接光猫 用一条网线一端接入光猫网口1或网口3或网口4 另一端接入无线路由器WAN接口 将无线路由器连接电脑 用一条网线一端接入无线路器LAN接口 另一端插入电脑 光猫的默认地址为192 168 1 1 所以无线路由器的LAN口
  • 日期加年,返回年份

    日期加年 返回字符串 param date str yyyy mm dd 必须是这个格式 param year 加的年 return string 年份 static function dateAddYear date str year i
  • 数据库连接异常:create connection error, url: jdbc:mysql://ip/数据库名, errorCode 0, state 08S01问题处理

    今天项目中新增了一部分接口 本地测试好之后打包部署到测试环境 数据库竟然连接失败 报错信息如下 create connection error url jdbc mysql ip 数据库名 errorCode 0 state 08S01 这
  • solidworks齿轮编辑_如何应用solidworks进行齿轮工程图绘制

    引言 齿轮是一种常用的传动零件 也是机械设计过程中经常需要设计的一种零件 由于齿轮的工程图绘制与一般零件有较大区别 在利用一般的三维软件设计出三维图形后并不能马上得到准确的二维图形 这种情况会大大降低工程技术人员的设计速度 增加设计成本 S
  • 安卓数据线ssh连树莓派(超简单)

    无需联网 无需无限网卡 树莓派 sudo vim etc network interfaces 添加或修改这句iface usb0 inet dhcp 然后手机数据线插上树莓派 开启usb网络共享 用better terminal或者ter
  • 记录一个std::future和std::async的demo

    Demo和代码简述 子线程函数 参数a传进去模拟遇到的带参数问题 函数的返回值可以是处理完的任意值 若有返回值则get 到的就是返回值 比如这个demo里get到的就是3 int TestNoClass int a int main int