首页 > 编程语言 >C++标准库类std::packaged_task

C++标准库类std::packaged_task

时间:2023-11-28 09:55:18浏览次数:35  
标签:库类 std task string 异步 packaged future

  std::packaged_task是C++11引入的标准库类,用于封装可调用对象,如函数等,并将封装对象作为异步任务进行管理,通过与std::future结合使用,完成异步任务结果的获取。

#include <iostream>
#include <thread>
#include <future>

std::string promise_string(std::string str)
{
    for (int i = 0; i < 100; i++)
    {
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
        std::cout << "sleep" << std::endl;
    }
    std::string str1 = "the current function name is ";
    str1.append(__FUNCTION__);
    return str + str1;
}

int main()
{
    std::packaged_task<std::string(std::string)> pTask(promise_string);
    std::future<std::string> fu = pTask.get_future();

    std::thread tr(std::move(pTask),"测试 ");
    std::string strR = fu.get();
    std::cout << "the result is:" << strR.c_str() << std::endl;
    tr.join();
    system("pause");
}

  std::packaged_task将promise_string作为可调用对象进行封装,通过调用get_future()函数获取与任务关联的std::future对象,用于获取异步任务的结果。创建一个线程并将std::packaged_task对象移动到线程中执行异步任务。在主线程中,可以继续执行其他任务。最后,通过调用futureResult.get()函数等待异步操作完成并获取结果。std::packaged_task对象是一次性的,即只能执行一次。如果需要多次执行相同的任务,需要创建多个std::packaged_task对象。另外,可以使用std::movestd::packaged_task对象移动到线程中执行,以避免不必要的拷贝。(该部分参考OpenAI解释)

标签:库类,std,task,string,异步,packaged,future
From: https://www.cnblogs.com/missyou0813/p/17861195.html

相关文章

  • Linux中断下半部处理机制-tasklet
    转载原文:https://www.cnblogs.com/Wangzx000/p/17488378.htmltasklet特性(1)一种特定类型的tasklet只能运行在一个CPU上,不能并行,只能串行执行(2)多个不同的类型的tasklet可以并行在多个CPU上(3)软中断是静态分配的,在内核编译好后,就不能再改变了。但tasklet灵活很多,可以在运行时......
  • 百战商城项目---第11章 文件服务器 FastDFS 搭建
    1简介FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份......
  • 聪明办法学Python-2023-task04&拓展01
    参考视频链接:【条件】聪明办法学Python第二版_哔哩哔哩_bilibili​优雅代码编写指北_哔哩哔哩_bilibilitask04if语句ifstatementConditionalsMakeDecisionsif语句流程判断成立不成立一个例子:deff(x):print("A",end="")......
  • C++标准库类std::shared_future
    std::shared_future是C++11的标准库类,其与std::future的不同是允许多个线程使用,多个线程可以同步共享,同时其又不会阻塞等待异步任务的完成。std::shared_future同样也提供get()方法用于获取异步执行的结果。#include<iostream>#include<thread>#include<future>void......
  • Linux安装fastdfs图片服务器
    1、阿里云安装centos7服务器得到用户名密码和ip后用securCrt连接工具链接远程主机2、安装fastdfs图片服务器(1)上传需要的压缩包libfastcommon-common.zip(依赖工具包)  FastDFS_v5.05.tar.gz(源码)  fastdfs-nginx-module_v1.16.tar.gz(与nginx连接的模块)nginx1.8版本  ......
  • C++标准库函数std::async
    1、std::asyncstd::async是C++11的标准库函数,用于创建执行异步任务并返回std::future对象来获取异步执行的结果状态。该函数最简单的用法如下所示:#include<iostream>#include<thread>#include<future>std::stringpromise_string(){for(inti=0;i<200;......
  • Python Multiprocessing Pool's Task Scheduling
    mppool的任务调度遵循FIFO机制。对任务数组,逐个分配进程资源。如对于p0-pn,pi对应的是a[i]的资源。一般来说sizeof(a)>sizeof(p),即任务数大于进程资源数。此时,空闲的资源将进一步使用FIFO,选取任务进行执行,从而避免资源浪费。因此,在排布a[i]的时候,基本是不需要进行时长大小......
  • std::future与std::promise在C++多线程同步与数据共享中的应用
    1、std::promise与std::futurestd::promise与std::future通过配合使用完成数据的同步与共享,两者均是模板类;std::promise存储异步执行的值或异常;std::future提供可供访问的异步执行结果。二者配合使用伪码如下:std::promise<Type>pr;std::future<Type>fu(pr.get_fu......
  • 【Cxx 20】使用 std::span 代替数组指针传参
    我们知道std::string_view可以创建std::string的一个视图,视图本身并不拥有实例,它只是保持视图映射的状态。在不修改实例的情况下,使用std::string_view会让字符串处理的性能大幅提升。实际上,对于那些连续的序列对象我们都可以创建这样一份视图,对于std::vector这样的对象可以提高某......
  • 【11月LeetCode组队打卡】Task5--UnionFind
    并查集UnionFind一种树型的数据结构,用于处理一些不交集(DisjointSets)的合并及查询问题联通子图最小生成树Kruskal算法最近公共祖先LCA不交集:没有重复元素的集合合并Union:二变一查询Find:确定元素所属集合,通常返回集合内的一个代表元素实现思路基于数组......