furture-demo

std::unorderd_map 简介 unorderd_map 简介 阅读详情
// 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;
}
OpenClaw 3.13 + Mac mini M4 集成 qmd 记忆存储:qmd embed 卡死 / 报错 sqlite-vec 不可用 终极解决教程 模型加速让 qmd 从国内镜像下载模型,避免网络超时;SQLite 扩展支持:修改 qmd 源码后,Bun 不再使用内置 SQLite,而是调用 Homebrew 安装的,该版本支持接口,可正常加载vec0.dylib向量扩展;OpenClaw 3.13 适配:核心逻辑与 OpenClaw 3.13 的 qmd 记忆调用逻辑完全兼容,无需额外调整;sqlite-vec 加载:qmd 自动通过sqlite-vec包获取vec0.dylib路径,调用完成向量扩展加载,实现高效向量搜索。 阅读详情

相关推荐

GPU计算板卡设计原理图:735-基于3U VPX的AGX Xavier GPU计算主板

基于3U VPX的 Jetson AGX Xavier GPU计算主板是LINUX环境下软件开发等理想工具。是用于视频处理,相机信号,支持PCIE、USB、RS422、RS232、网口、SPI、I2C等综合性的信号计算主板。3. 支持外接HDMI连接显示器,并支持键盘,鼠标等外接设备进行调试。8 核 ARM v8.2 64 位 CPU、8 MB L2 + 4 MB L3。4路Gigabit Ethernet (10/100/100)link。1路RS232,1路RS485。1路 NVMe PCIeX4。

980

Java并发编程:Callable、Future和FutureTask原理解析

返回结果的任务Callable与FutureExecutor框架使用Runnable作为其基本的任务表示形式。Runnable是一种有很大局限的抽象,它不能返回一个值或抛出一个受检查的异常。Runnable接口:public interface Runnable { public abstract void run(); }由于run()方法返回值为void类型,所以在执行完任务之后无法返回

codershamo的博客 2万+

加湿器方案-DLT8M04TS-杰力科创

基本组成: 一个触摸按键、一组RGB灯、一个雾化片、一个充电IC。 产品功能: 第一次上电光机状态,RGB红/绿/红灯依次闪烁灭; 2、按键功能:短按开关机和三档喷雾工作模式,第一次短按持续喷雾,短按第二次喷3S,停3S,短按第三次关闭喷雾模式,依次循环; 在喷雾或是不喷雾的状态下长按1.5S RGB灯渐变,一直循环,第二次长按当前灯光闪烁一下常亮,第三次长按关机; 3、持续喷雾定时5小时自动断电,间歇喷雾定时10小时自动断电,若在间歇工作时有切换为持续喷雾,那间歇喷雾的...

JLKCsz的博客 513

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...

Li Kang 笔记本 2万+

LLM and Embedding区别

LLM(大语言模型)和 Embedding(嵌入)是自然语言处理(NLP)中的两个核心概念,它们的核心区别在于。Embedding 计算向量。

u010674101的专栏 1875

多核系统核间通信(IPC)设计:从硬件机制到软件实现

在多核处理器与嵌入式系统设计中,核间通信(IPC)是实现计算资源协同工作的核心技术。其原理基于共享内存、硬件邮箱与中断等底层硬件机制,通过构建结构化的消息传递通道,实现核间高效、可靠的数据交换。该技术的核心价值在于打破多核间的壁垒,将分散的计算单元整合为有机整体,从而显著提升系统整体性能与响应能力。在工程实践中,IPC广泛应用于智能座舱、边缘AI网关、实时控制系统等场景,用于处理如仪表显示、AI推理、实时控制等复杂任务。本文聚焦于基于共享内存与VRING的消息队列实现,深入剖析缓存一致性、内存屏障等关键问题

weixin_27006759的博客 598

Future和FutureTask的区别

java中有Future和FutureTask这两个类Future是一个接口,代表可以取消的任务,并可以获得任务的执行结果FutureTask 是基本的实现了Future和runnable接口           实现runnable接口,说明可以把FutureTask实例传入到Thread中,在一个新的线程中执行。           实现Future接口,说明可以从FutureTask中通过g...

lovezhaohaimig的博客 4789

VLA数据采集以及训练

直到15s计时结束,弹出下面的内容,这个时候不会录制视频了,这里就是需要复位物体到初始位置,尽量保证物体的初始位置放在一样的位置,计时3s,同样根据自己的复位时间来修改(--dataset.reset_time_s=3),这里和前面录制数据的区别就是fps后面多了一个nment,可以作为一个标记,知道什么时候开始去复位而不会拍到自己的手臂。复制网址,在浏览器打开,会出现下面的窗口,依次检查每一轮是否存在问题,例如是否出现录制不完整,是否存在除了机械臂以外的其他移动物体,这些都可能会影响最终训练的效果。

weixin_45303602的博客 497

对多线程future以及futureTask的理解

异步计算助手FutureTask 由来原因: 无论是Runnable实例还是Callable实例所表示的任务,只要我们把这些任务扔到线程池中,那么这些任务就是异步任务。 1.采用Runnbale实例来表示异步任务,其优点:任务既可以以相应的Runnable实例为参数创建并启动一个工作线程,也可以交给一个线程池或者Executor的其他实例类来执行;其缺点:我们无法直接获取任务的执行结果。 2...

qq_33531432的博客 403

Parasoft C++Test软件集成测试(部件测试)_实例讲解

本文以一组功能函数组件作为示例,讲解了如何使用C++Test进行软件集成测试。本文的示例比较简单,但是思路、方法和流程都是通用的,希望对大家有所帮助。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 734

windows搭建IIS(FTP)

适用于参加网络系统管理的学生进行学习与参考

a1119619789的博客 280

多线程编程七-Furture模式

Furture模式是把一个任务拆成多个子任务,没有依赖关系的子任务来并行执运行的模式,旨在提高程序处理效率 假如说做饭需要三步,买菜(2秒)、买油(3秒)、炒菜(4秒)三步,其中买菜、买油可以两个人同时做,炒菜依赖买菜、买油的结果。 private String buyVegetable() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace();...

qq_35930102的博客 803

用 ABAP EML 驾驭 RAP 业务对象:从事务缓冲区到落库提交的一条龙实践

摘要:ABAP EML(Entity Manipulation Language)是SAP RAP框架的核心语言能力,为ABAP开发者提供强类型、批处理友好的方式操作RAP业务对象。EML通过事务缓冲区管理数据变更,支持读取(READ ENTITIES)、修改(MODIFY ENTITIES)及事务控制(COMMIT/ROLLBACK ENTITIES)。其特点包括:基于BDEF派生类型确保类型安全,%control和%cid等特殊字段实现精细控制,统一的消息模型便于错误处理。相比传统ABAP数据访问方式,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 952

设计模式-Future

Future设计模式学习记录备忘 Future模式设计图 图片摘自(https://www.cnblogs.com/jianzh5/p/6121120.html) 简单实现代码 Data接口 package org.cc.future; public interface Data { public String getResult(); } ...

sdfsfaf的博客 509

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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&

u011047968的专栏 408

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Callable与Future

Callable与Future 使用线程池来创建并行的任务: 这个一个简单的demo,可以在最后统一获取执行结果;以此类推ExecutorService threadPool = Executors.newFixedThreadPool(2); Future<Integer> future = threadPool.submit(new Callable<Integer>() {

qq_23339149的博客 392

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++11,thread,sleep,锁

相关链接:https://blog.youkuaiyun.com/knowledgebao/article/details/85076661 sleep: #include &lt;thread&gt; #include &lt;iostream&gt; auto start = std::chrono::high_resolution_clock::now(); std::this_thread::...

knowledgebao的博客 2858

stdout stderr 重定向到文件

stdout/stderr 重定向到新文件,重定向到已经打开的文件,命令行的重定向

knowledgebao的博客 2391

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...

knowledgebao的博客 2183

c/c++/c++11/c++14 static const constexpr区别

c/c++/c++11/c++14 static const constexpr区别

knowledgebao的博客 1727

C语言-含有指针的结构体浅拷贝注意事项

相关链接:https://blog.youkuaiyun.com/knowledgebao/article/details/85076661 浅拷贝指针覆盖问题。 下边代码包含: 1,结构体CHSYS_AV_DecParam 2,CHSYS_AV_DecParam的变量m_paramDec 3,函数Create 有两点需要注意: 第一:判断if (pParam != &amp;m_paramDe...

knowledgebao的博客 1574

GCC编译/连接/优化等选项

GCC 编译流程分为四个阶段:预处理、编译、汇编、链接,这里讲解gcc用到的一些参数-o(输出文件名)-lm(链接数学库 libm)-Wall(启用警告)-O2(优化级别)–gc-sections(移除未使用的节)-soname(设置共享库运行时名称)-T(使用自定义链接脚本)

knowledgebao的博客 1573

strncpy 和 snprintf 的区别

strncpy 和 snprintf 的区别尾部是否添加 '\0' 字符问题

knowledgebao的博客 950

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

knowledgebao的博客 523

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

knowledgebao的博客 292

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

knowledgebao的博客 190
上一篇: cmake举例
下一篇: packaged_task-demo
knowledgebao
博客等级 码龄15年 401粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值