首页 > 编程语言 >C++标准库函数std::async

C++标准库函数std::async

时间:2023-11-27 14:58:54浏览次数:27  
标签:std 异步 string launch promise async 库函数

1、std::async

  std::async是C++11的标准库函数,用于创建执行异步任务并返回std::future对象来获取异步执行的结果状态。该函数最简单的用法如下所示:

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

std::string promise_string()
{
    for (int i = 0; i < 200; i++)
    {
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
        std::cout << "sleep" << std::endl;
    }

    return __func__;
}

int main()
{
    std::future<std::string> fu = std::async(promise_string);
    system("pause");
}

   以上代码中promise_string函数将在后台与主线程同步执行。

2、std::async的两种执行策略std::launch::async与std::launch::deferred

...
std::future<std::string> fu = std::async(std::launch::async, promise_string);
system("pause");
...
std::future<std::string> fu = std::async(std::launch::deferred, promise_string);
std::cout << fu.get().c_str() << std::endl; system("pause");

  策略std::launch::async强制在新线程中执行,但并不保证一定会在新线程中执行异步任务,具体的执行方式取决于实现;策略std::launch::deferred延迟执行,直到调用get()或wait()函数。以上两段代码展示两种策略下异步任务的执行,在std::launch::deferred策略下,不调用fu.get(),异步任务将不会执行。

标签:std,异步,string,launch,promise,async,库函数
From: https://www.cnblogs.com/missyou0813/p/17859333.html

相关文章

  • 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这样的对象可以提高某......
  • 函数中的库函数与自定义函数
    1.函数是什么:在计算机科学中,子程序也就是函数,是一个大型程序中的某部分代码,由一个或多个语句组成。负责完成某项特定任务,而且相对于其他代码,具有相对的独立性。一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏,这些代码通常被集成为软件库。2.库函数举例:lo函数字符串操作函......
  • 不要轻易定义指向std::vector中的元素的指针
    类应该是被封装的,类的用户通过接口使用类提供的功能,而不必关心类的内部如何实现。然而,C++标准库容器std::vector的实现渗透到了接口中来。对于以下代码:constintpushNum=10;std::vector<int>v={1,2,3};int*p=&v[1];std::cout<<"*p="<<*p......
  • 【Python】async与await用法
    async用于修饰函数,将普通函数变为异步函数。asyncdeft2():print(2)直接调用异步函数不会返回结果,而是返回一个协程对象。协程需要通过其他方式来驱动,如async.run函数。await函数只能在异步函数中使用,可以通过该关键字,挂起当前协程,让另一个协程执行完毕,再次执行本协程......
  • C# async await 异步编程
    开始异步方法不等于多线程,await是等但又是不等。1.调用系统的async方法staticasyncTaskMain(string[]args){awaitFile.WriteAllTextAsync("a.txt","xxxxxxxxxx");strings=awaitFile.ReadAllTextAsync("a.txt");Console.WriteLine(s);}使......
  • .net 6 async await 取消Task任务
    引言在用await执行方法时,方法有时候会执行特别长时间,在执行过程中想中断方法,需要使用到CancellationToken类。控制台程序中取消Task任务一、创建一个执行需要很长时间的方法staticasyncTaskDownloadAsync(stringurl,intn, CancellationTokencancellationToken){......
  • 弄清using namespace std的作用
    ⭐C++标准为了和C区别开!为了正确地使用命名空间,规定头文件不使用后缀.h。例如当我们使用<iostream.h>时,相当于在C中调用库函数。使用usingnamespacestd例如1#include2#include3#include4usingnamespacestd;这样使用的话,就相当于std命名空间内所有的标识符都已声......
  • C++11 多线程(std::thread)实例
    C++11的std::thread在C中已经有一个叫做pthread的东西来进行多线程编程,但是并不好用(如果你认为句柄、回调式编程很实用,那请当我没说),所以c++11标准库中出现了一个叫作std::thread的东西。std::thread常用成员函数构造&析构函数举个栗子例一:thread的基本使用1//Compiler:......
  • std::thread方法join与detach
    1、std::joinstd::join是std::thread类的成员函数之一,用于等待线程的执行完成。#include<iostream>#include<utility>#include<thread>#include<chrono>#include<atomic>voidprocess(std::stringstr_info){for(inti=0;i<500;++i)......