首页 > 编程语言 >C++11之std::future对象的基本用法

C++11之std::future对象的基本用法

时间:2023-04-21 15:00:10浏览次数:44  
标签:11 std cout thread int C++ future include

1、

// future example
#include <iostream>       // std::cout
#include <future>         // std::async, std::future
#include <chrono>         // std::chrono::milliseconds
// a non-optimized way of checking for prime numbers:
bool is_prime (int x) {
  for (int i=2; i<x; ++i) if (x%i==0) return false;
  return true;
}
int main ()
{
  // call function asynchronously:
  std::future<bool> fut = std::async (is_prime,444444443); 

  // do something while waiting for function to set future:
  std::cout << "checking, please wait";
  std::chrono::milliseconds span (100);
  while (fut.wait_for(span)==std::future_status::timeout)
    std::cout << '.' << std::flush;

  bool x = fut.get();     // retrieve return value

  std::cout << "\n444444443 " << (x?"is":"is not") << " prime.\n";

  return 0;
}

2、

// promise example
#include <iostream>       // std::cout
#include <functional>     // std::ref
#include <thread>         // std::thread
#include <future>         // std::promise, std::future

void print_int (std::future<int>& fut) {
  int x = fut.get();
  std::cout << "value: " << x << '\n';
}

int main ()
{
  std::promise<int> prom;                      // create promise
  std::future<int> fut = prom.get_future();    // engagement with future
  std::thread th1 (print_int, std::ref(fut));  // send future to new thread
  prom.set_value (10);                         // fulfill promise                                               // (synchronizes with getting the future)
  th1.join();
  return 0;
}

3、

// packaged_task example
#include <iostream>     // std::cout
#include <future>       // std::packaged_task, std::future
#include <chrono>       // std::chrono::seconds
#include <thread>       // std::thread, std::this_thread::sleep_for
// count down taking a second for each value:
int countdown (int from, int to) {
  for (int i=from; i!=to; --i) {
    std::cout << i << '\n';
    std::this_thread::sleep_for(std::chrono::seconds(1));
  }
  std::cout << "Lift off!\n";
  return from-to;
}
int main ()
{
  std::packaged_task<int(int,int)> tsk (countdown);   // set up packaged_task
  std::future<int> ret = tsk.get_future();            // get future

  std::thread th (std::move(tsk),10,0);   // spawn thread to count down from 10 to 0
  // ...
  int value = ret.get();                  // wait for the task to finish and get result
  std::cout << "The countdown lasted for " << value << " seconds.\n";
  th.join();
  return 0;
}

 

标签:11,std,cout,thread,int,C++,future,include
From: https://www.cnblogs.com/xiaochouk/p/17340366.html

相关文章

  • JMeter入门教程(11) --关联
    文章目录1.任务背景2.任务目标3.任务实操1.任务背景当JMeter执行脚本时,伪装成浏览器,然后根据脚本,把当初真的浏览器所发过的内容,再对网站服务器重新发送一遍,JMeter企图骗过服务器,让服务器以为它就是当初的浏览器,然后把网站内容传送给JMeter。2.任务目标掌握掌握JMeter性能测试脚本......
  • YOLO超快时代终结了 | RT-DETR用114FPS实现54.8AP,远超YOLOv8
    前言 本文首先分析了现代实时目标检测器中NMS对推理速度的影响,并建立了端到端的速度基准。为了避免NMS引起的推理延迟,作者提出了一种实时检测Transformer(RT-DETR),这是第一个实时端到端目标检测器。具体而言,设计了一种高效的混合编码器,通过解耦尺度内交互和跨尺度融合来高效处理多......
  • DELL笔记本安装supportAssist方法for win11
    先安装,https://www.advanceduninstaller.com/卸载本机自带的supportAssist然后重新下载supportAssist地址:https://www.dell.com/en-us/shop/supportassistforpcs/cp/supportassistforpcs安装即可 ......
  • 一维与二维前缀和(蓝桥杯复习+例题讲解+模板c++)
    文章目录前缀和二维前缀和总结3956.截断数组99.激光炸弹前缀和前缀和是一种常见的算法,用于快速计算数组中某一段区间的和。前缀和的思想就是预处理出数组中前缀和,然后用后缀和减去前缀和,即可快速计算区间和。以一维数组为例,设表示数组中第个元素的值,表示数组中前个元素的......
  • 树状数组解决逆序对问题c++
    前言在算法竞赛中,求逆序对是一个常见的问题。逆序对是指在一个数列中,如果存在,且,那么就是一个逆序对。例如,数列中的逆序对有,总共有树状数组树状数组(FenwickTree)是一种高效的数据结构,用于维护数列的前缀和。树状数组的主要优势在于可以快速对数列进行单点更新和区间查询,时间......
  • 二分查找例题与模板(蓝桥杯复习+例题讲解+模板c++)
    文章目录二分模板1460.我在哪?102.最佳牛围栏113.特殊排序二分模板本文所使用的二分模板都是确保最终答案落在[L,R]以内,循环以L==R结束,每次二分的中间值会使mid成为左右区间的二者之一。单调递增序列找大于等于x的最小的值:区间的划分[l,mid][mid+1,r]while(l<r){ intmid......
  • JS课堂笔记(4.11-4.16)
    一、简单了解JS1.JavaScript(简称JS)是作为开发Web页面的脚本语言。2.JS是从1995年由网景公司的布兰德开发。3.JavaScript的标准是ECMAScript。4.JS代码是从上往下执行的。 二、变量1.变量名的值可以重复赋值(值可以修改),变量可以重复声明。2.JS中“+”号很特殊,只要是和......
  • 《rv1109 部署yolov5训练模型汇总》
    环境以及相关软件版本:yolov5(v5.0)、Ubuntu18.04、rknn-toolkit1.7.3、rv1109  一.yolov5环境安装1conda安装1.1Anaconda安装包:在浏览器中打开 https://www.anaconda.com/products/individual 下载适合你的操作系统的Anaconda安装包(Python版本根据需要选择......
  • AC自动机的C++代码实现与过程讲解
    AC自动机(Aho-Corasickalgorithm)是一种多模式字符串匹配算法。它可以快速地查找多个模式串在一段文本串中出现的位置,并支持模式串的预处理,使得在查询时能够快速地匹配。C++代码实现:#include<iostream>#include<queue>#include<cstring>usingnamespacestd;constintM......
  • ABB工业控制器 UNITROL 1020 3BHE030579R0003 UNS0119A-Z,V1 3BHE030579R0001
    W;1  ⑧0③0①⑦77⑤  9ABBUNITROL10203BHE030579R0003 UNS0119A-Z,V13BHE030579R0001 DDC779BE023BHE006805R0002 XO08R21SBP260109R1001 PM866K013BSE050198R1 CI858K013BSE018135R1 PU515A3BSE032401R1 励磁控制系统的主要任务是向发电机......