// future example
#include <chrono> // std::chrono::milliseconds
#include <cmath>
#include <future> // std::async, std::future
#include <iostream> // std::cout
std::chrono::steady_clock::time_point now() {
return std::chrono::steady_clock::now();
}
long long sub(std::chrono::steady_clock::time_point begin, std::chrono::steady_clock::time_point end) {
return std::chrono::duration_cast<std::chrono::seconds>(end - begin).count();
}
int shared_future() {
std::cout << "--------------- shared_future" << std::endl;
std::future<int> fut = std::async([] { return 10; });
std::shared_future<int> shared_fut = fut.share(); //after fut is not valid
// 共享的 future 对象可以被多次访问.
std::cout << "value: " << shared_fut.get() << '\n';
std::cout << "its double: " << shared_fut.get() * 2 << '\n';
std::cout << "--------------- shared_future" << std::endl;
return 0;
}
int wait() {
// a non-optimized way of checking for prime numbers:
auto is_prime = [](int x) {
for (int i = 2; i < x; ++i) {
if (x % i == 0)
return false;
}
return true;
};
// call function asynchronously:
std::future<bool> fut = std::async(is_prime, 194232491);
std::cout << "Checking...\n";
fut.wait();
std::cout << "\n194232491 ";
if (fut.get()) // guaranteed to be ready (and not block) after wait returns
std::cout << "is prime.\n";
else
std::cout << "is not prime.\n";
return 0;
}
int wait_for() {
std::cout << "--------------- wait_for" << std::endl;
// a non-optimized way of checking for prime numbers:
auto is_prime = [](int x) {
for (int i = 2; i < x; ++i) {
if (x % i == 0)
return false;
}
return true;
};
// 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 << '.';
bool x = fut.get(); // retrieve return value
std::cout << "\n444444443 " << (x ? "is" : "is not") << " prime.\n";
std::cout << "--------------- wait_for" << std::endl;
return 0;
}
int async() {
std::cout << "--------------- async" << std::endl;
auto ThreadTask = [](int n) {
std::cout << std::this_thread::get_id()
<< " start computing..." << std::endl;
double ret = 0;
for (int i = 0; i <= n; i++) {
ret += std::sin(i); //正弦函數
}
std::cout << std::this_thread::get_id()
<< " finished computing..." << std::endl;
return ret;
};
std::future<double> f(std::async(std::launch::async, ThreadTask, 100000000));
#if 0
while(f.wait_until(std::chrono::system_clock::now() + std::chrono::seconds(1))
!= std::future_status::ready) {
std::cout << "task is running...\n";
}
#else
while (f.wait_for(std::chrono::seconds(1)) != std::future_status::ready) {
std::cout << "task is running...\n";
}
#endif
std::cout << f.get() << std::endl;
std::cout << "--------------- async" << std::endl;
return EXIT_SUCCESS;
}
int deferred() {
std::cout << "--------------- deferred" << std::endl;
auto do_print_ten = [](char c, int ms) {
for (int i = 0; i < 10; ++i) {
std::this_thread::sleep_for(std::chrono::milliseconds(ms));
std::cout << c;
}
};
std::cout
<< "with launch::async:\n";
std::future<void> foo =
std::async(std::launch::async, do_print_ten, '*', 100);
std::future<void> bar =
std::async(std::launch::async, do_print_ten, '@', 200);
// async "get" (wait for foo and bar to be ready):
foo.get();
bar.get();
std::cout << "\n\n";
std::cout << "with launch::deferred:\n";
foo = std::async(std::launch::deferred, do_print_ten, '*', 100);
bar = std::async(std::launch::deferred, do_print_ten, '@', 200);
// deferred "get" (perform the actual calls):
foo.get();
bar.get();
std::cout << '\n';
std::cout << "--------------- deferred" << std::endl;
return 0;
}
int asyncTime() {
auto sleep = [](int s) { std::this_thread::sleep_for(std::chrono::seconds(s)); };
auto start = now();
std::async(std::launch::async, sleep, 2); // 临时对象被析构,阻塞 2s
std::cout << "cost:" << sub(start, now()) << std::endl; //cost 2s
start = now();
std::async(std::launch::async, sleep, 2); // 临时对象被析构,阻塞 2s
std::cout << "cost:" << sub(start, now()) << std::endl; //cost 2s
start = now();
auto f1 = std::async(std::launch::async, sleep, 2);
std::cout << "cost:" << sub(start, now()) << std::endl; //cost 0s
start = now();
auto f2 = std::async(std::launch::async, sleep, 2);
std::cout << "cost:" << sub(start, now()) << std::endl; //cost 0s
f2.get();
std::cout << "cost:" << sub(start, now()) << std::endl; //cost 2s
return 0;
}
int main() {
shared_future();
wait_for();
wait();
async();
deferred();
auto start = now();
asyncTime();
std::cout << "main::cost:" << sub(start, now()) << std::endl; //cost 6s
return 0;
}
相关推荐
深入理解Cornerstone3D.js渲染Stack影像数据
这个是调用的core\src下的init.ts的init方法,作用是:初始化cornerstone-core,检测客户端是否支持WebGL,默认情况下是支持中等GPU层级.另外一个重要的是实例化WebWorkManager.WebWorkManager类似于Java的线程池,是用来对Web Worker进行管理的管理器。使用DICOMwebClient获取影像文件的元数据,然后将它们缓存到imageLoader的metaDataManager中,在上面我们可以输出元数据看一下是什么。
Java并发编程:Callable、Future和FutureTask原理解析
返回结果的任务Callable与FutureExecutor框架使用Runnable作为其基本的任务表示形式。Runnable是一种有很大局限的抽象,它不能返回一个值或抛出一个受检查的异常。Runnable接口:public interface Runnable { public abstract void run(); }由于run()方法返回值为void类型,所以在执行完任务之后无法返回
HDLbits练习11 - Counter 1-12 ( Exam/ece241 2014 q7a )
(如这题用于当复位信号为高或者计数器递增至12时,该信号置1使计数器的输入信号 ’ d ’ 变为 ’ 4’b0001 ’ ,再加载到 ’ Q ’ 中。当 ’ load ’ 信号为高时,在时钟的上升沿,计数器会将 ’ d ’ 输入的值加载到 ’ Q ’ (计数器的输出)中,而不是递增当前值。用途:在时钟上升沿触发的情况下,如果 ’ enable ’ 信号为高,计数器的值会递增,如果 ’ load ’ 信号为高,计数器将加载 ’ d ’ 信号的值。作用: ’ Q ’ 是计数器的当前值,也是模块的主要输出。
in future 和 in the future用法的区别
in future 和当前的事情有关系,比如说今天迟到了,老师警告说今后要按时到学校哦,就用in future。in the future 只是一种抽象的概念,词组有in the near/distant future, 不久/很久以后。牛津例句1. Please be punctual in future. 今后请准时。2. Who knows what will happen in the f...
电赛综合测评题练习(一)-(与2013年电赛综合测评要求类似)
电赛综合测评题练习 文章目录电赛综合测评题练习前言1. 波形发生器1.1 题目说明1.1.1 可用器件1.1.2 设计要求1.1.3 设计方案论证1.2 仿真电路设计1.2.1 脉冲波发生器电路1.2.1.1 方案介绍1.2.1.2 理论分析与计算1.2.1.3 电路系统设计1.2.1.4 仿真方案与仿真测试结果1.2.2 锯齿波电路1.2.2.1 理论分析与计算1.2.2.2 电路系统设计1.2.2.3 仿真方案与仿真测试结果1.2.3 正弦波I电路1.2.3.1 理论分析与计算1.2.3.2 电路系
C# emgu.cv图像识别 从大图中寻找小图,判断存在图的相似度
这是2个问题,我采用emgu.cv来解决这个识别问题,这里需要在nuget中引用emgu。最近写了一个在一张图片中,截取一部分,通过机器判断截取图片是这张图片的。第一、通过小图去找判断是否存在大图中,第二、小图存在大图的什么位置。
Future和FutureTask的区别
java中有Future和FutureTask这两个类Future是一个接口,代表可以取消的任务,并可以获得任务的执行结果FutureTask 是基本的实现了Future和runnable接口 实现runnable接口,说明可以把FutureTask实例传入到Thread中,在一个新的线程中执行。 实现Future接口,说明可以从FutureTask中通过g...
H.264 入门篇 - 09 (帧间预测 - 参考帧列表)
短期和长期的关系和区别:在一个解码器中的 DPB(参考帧缓存)大小总是有限的,所以引入一个问题,什么样的参考帧会被保存到 DPB 中,什么样的参考帧会被移除出去,因此将分为长期和短期参考帧,所谓短期参考帧是这帧不会长期驻留在DPB中,如果参考帧缓存已满或者有其他特定的条件,那么短期参考帧就会被从DPB中移除;与之相对的长期参考帧,只要没有遇到某个指定的条件,遇到某个IDR帧, 遇到了清空整个DPB的指令等等,那么长期参考帧会长期在DPB中,不会因为有新的参考帧而被冲刷掉;(P帧是按照编码顺序)
对多线程future以及futureTask的理解
异步计算助手FutureTask 由来原因: 无论是Runnable实例还是Callable实例所表示的任务,只要我们把这些任务扔到线程池中,那么这些任务就是异步任务。 1.采用Runnbale实例来表示异步任务,其优点:任务既可以以相应的Runnable实例为参数创建并启动一个工作线程,也可以交给一个线程池或者Executor的其他实例类来执行;其缺点:我们无法直接获取任务的执行结果。 2...
YOLOv8安防监控实战:跌倒/闯入/徘徊实时检测(附TensorRT加速+声光报警部署代码)
精准性:针对跌倒/闯入/徘徊的行为特征优化,准确率达89.3%,误报率低于5次/天;实时性:TensorRT加速到50+FPS,报警延迟<1秒,满足安防“黄金响应时间”;低成本:无需专用AI芯片,RTX 3060或Jetson Orin就能跑,硬件成本比传统方案低60%;易部署:代码全开源,提供从模型训练到硬件联动的完整流程,2天即可搭起原型系统。如果你的安防监控还在“漏报误报”“响应慢”,建议先从跌倒检测的姿态过滤改起——用100张样本测试,再集成TensorRT加速,90%能看到明显改善。
ABAP Cloud:面向云时代的 ABAP 开发范式与实践指南
摘要: 本文系统讲解SAP ABAP Cloud开发模型,涵盖其架构、工具链、规范及实践。ABAP Cloud作为统一开发模型,支持在SAP BTP和S/4HANA上构建云就绪应用,遵循clean core原则,通过RAP(RESTful应用编程模型)实现低耦合扩展。文章详细解析其核心构成(RAP、稳定API、clean core约束)、工具链(ADT、软件物流)及两种典型扩展场景(on-stack与side-by-side),并附可运行RAP示例代码(如销售笔记应用)。重点强调通过规范开发确保系统可升级性
多线程编程七-Furture模式
Furture模式是把一个任务拆成多个子任务,没有依赖关系的子任务来并行执运行的模式,旨在提高程序处理效率 假如说做饭需要三步,买菜(2秒)、买油(3秒)、炒菜(4秒)三步,其中买菜、买油可以两个人同时做,炒菜依赖买菜、买油的结果。 private String buyVegetable() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace();...
轴承故障诊断领域的论文到底有多水
这个是最让人困惑的,就好像你说自己证明了某个方法更好,但是你却没有交代自己怎么做的,或者说你交代的过程有外行话或者逻辑上的缺陷,但是你就这么给出个结果完事了。由于自己没有足够大的学术交流圈子,为了尽量避免误判,我在原来13篇论文的基础上又读了18篇,这些论文至少都出自中文核心,有一些还有EI的title,事实上近几年能找到的文章也不算多,这些基本能说明问题了。当然,还有更多细节,比如说损失函数你得交代吧,模型超参数得介绍全吧,至少数据集是哪个工况下的得说吧,当你想复现这些论文,关注点在这些地方的时候。
设计模式-Future
Future设计模式学习记录备忘 Future模式设计图 图片摘自(https://www.cnblogs.com/jianzh5/p/6121120.html) 简单实现代码 Data接口 package org.cc.future; public interface Data { public String getResult(); } ...
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
J.U.C系列(四)FutrueTask的使用
FutureTask FutureTask实现了RunnableFuture接口,RunnableFuture接口继承于Runnable, Future<V> 这使得FutureTask既可以当做一个任务执行,也可以有 返回值。 public class FutureTask<V> implements RunnableFuture<V> public interface RunnableFuture<V> extends Runnable, Future&
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
Callable与Future
Callable与Future 使用线程池来创建并行的任务: 这个一个简单的demo,可以在最后统一获取执行结果;以此类推ExecutorService threadPool = Executors.newFixedThreadPool(2); Future<Integer> future = threadPool.submit(new Callable<Integer>() {
C++11,thread,sleep,锁
相关链接:https://blog.youkuaiyun.com/knowledgebao/article/details/85076661 sleep: #include <thread> #include <iostream> auto start = std::chrono::high_resolution_clock::now(); std::this_thread::...
stdout stderr 重定向到文件
stdout/stderr 重定向到新文件,重定向到已经打开的文件,命令行的重定向
C/C++调用第三方程序
相关链接:https://blog.youkuaiyun.com/knowledgebao/article/details/85076661 目录 linux下: 1,exec() 2,spawn() 3,stem() window下: 1,WinExec()函数 2,ShellExecute()函数 3,CreateProcess函数 4,CreateProcessAsUser lin...
c/c++/c++11/c++14 static const constexpr区别
c/c++/c++11/c++14 static const constexpr区别
C语言-含有指针的结构体浅拷贝注意事项
相关链接:https://blog.youkuaiyun.com/knowledgebao/article/details/85076661 浅拷贝指针覆盖问题。 下边代码包含: 1,结构体CHSYS_AV_DecParam 2,CHSYS_AV_DecParam的变量m_paramDec 3,函数Create 有两点需要注意: 第一:判断if (pParam != &m_paramDe...
GCC编译/连接/优化等选项
GCC 编译流程分为四个阶段:预处理、编译、汇编、链接,这里讲解gcc用到的一些参数-o(输出文件名)-lm(链接数学库 libm)-Wall(启用警告)-O2(优化级别)–gc-sections(移除未使用的节)-soname(设置共享库运行时名称)-T(使用自定义链接脚本)
strncpy 和 snprintf 的区别
strncpy 和 snprintf 的区别尾部是否添加 '\0' 字符问题
C++time相关
using TIME_POINT = std::chrono::steady_clock::time_point; TIME_POINT getCurrentTimePoint(){ return std::chrono::steady_clock::now(); } int64_t getDeltaS(TIME_POINT beg){ return getDeltaS(beg, getCurrentTimePoint()); } int64_t getDeltaS(TIME_POIN
std::future
1. future 1. future 1.1. future相关结构 1.2. async相关结构 1.3. packaged_task 相关结构 1.4. promise相关结构 1.5. 参考资料 1.1. future相关结构 Member functions fun desc pub/priv (constructor) constructs the future object (public member function) (destructor) destruc
promise-demo
#include <chrono> // std::chrono::seconds #include <exception> // std::exception, std::current_exception #include <functional> // std::ref #include <future> // std::promise, std::future #include <iostream> // std::c
1493



被折叠的 条评论
为什么被折叠?



