当前位置: 首页 > news >正文

哪些网站使用vue做的网站首页seo关键词布局

哪些网站使用vue做的,网站首页seo关键词布局,给网站写文章怎么做,在线做漫画的网站C 异步编程:std::async、std::future、std::packaged_task 和 std::promise 在现代 C 编程中,异步编程已经成为一种常见的模式。利用 C11 引入的标准库组件 std::async、std::future、std::packaged_task 和 std::promise,我们可以更方便地处…

C++ 异步编程:std::asyncstd::futurestd::packaged_task 和 std::promise

在现代 C++ 编程中,异步编程已经成为一种常见的模式。利用 C++11 引入的标准库组件 std::asyncstd::futurestd::packaged_task 和 std::promise,我们可以更方便地处理多线程任务。本文将介绍这些组件的基本用法及其应用场景,帮助你理解如何利用这些工具实现高效的异步编程。


1. std::future 和 std::promise

std::future

std::future 是一种用于获取异步计算结果的机制。它提供了一个等待异步任务完成并获取结果的方法。std::future 对象通过与 std::promise 结合使用,允许线程安全地获取异步操作的结果或异常。

基本用法:

#include <iostream>
#include <thread>
#include <future>void async_task(std::promise<int>& prom) {std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟耗时操作prom.set_value(42); // 设置计算结果
}int main() {std::promise<int> prom;std::future<int> fut = prom.get_future();std::thread t(async_task, std::ref(prom)); // 使用 std::ref 传递 promise 的引用t.detach(); // 线程分离,允许在主线程中继续执行int result = fut.get(); // 等待异步任务完成并获取结果std::cout << "Result: " << result << std::endl;return 0;
}

解释:

  • std::promise<int> 创建一个 promise 对象,用于设置值。
  • std::future<int> fut = prom.get_future(); 从 promise 获取 future 对象。
  • 在异步线程中,调用 prom.set_value(42); 设置结果。
  • fut.get(); 阻塞当前线程,直到结果可用。
std::promise

std::promise 用于在异步操作中设置结果。它与 std::future 结合使用,以便从线程中传递结果或异常。std::promise 对象只能被设置一次,设置多次会引发异常。

基本用法:

#include <iostream>
#include <thread>
#include <future>void async_task(std::promise<int> prom) {prom.set_value(42); // 设置计算结果
}int main() {std::promise<int> prom;std::future<int> fut = prom.get_future();std::thread t(async_task, std::move(prom)); // 使用 std::move 转移 promiset.join(); // 等待线程完成int result = fut.get(); // 获取异步任务的结果(会阻塞直到结果可用)std::cout << "Result: " << result << std::endl;return 0;
}

解释:

  • std::promise<int> prom; 创建 promise 对象。
  • std::future<int> fut = prom.get_future(); 获取 future 对象。
  • 在异步线程中,通过 prom.set_value(42); 设置结果。
  • fut.get(); 获取结果并阻塞当前线程。

2. std::packaged_task

std::packaged_task 是一个可调用对象,用于将任务的结果与 std::future 绑定。它允许你将一个普通的函数或函数对象封装为一个异步任务,并从中获取结果。

基本用法:

#include <iostream>
#include <thread>
#include <future>int long_computation(int x) {std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟耗时操作return x * x;
}int main() {std::packaged_task<int(int)> task(long_computation); // 创建任务std::future<int> fut = task.get_future(); // 获取 future 对象std::thread t(std::move(task), 10); // 使用 std::move 转移任务,并传递参数t.join(); // 等待线程完成int result = fut.get(); // 获取异步任务的结果(会阻塞直到结果可用)std::cout << "Result: " << result << std::endl;return 0;
}

解释:

  • std::packaged_task<int(int)> task(long_computation); 创建一个任务对象,封装 long_computation 函数。
  • std::future<int> fut = task.get_future(); 获取与任务关联的 future 对象。
  • std::thread t(std::move(task), 10); 将任务移动到线程中,并传递参数。
  • fut.get(); 获取任务结果。

3. std::async

std::async 是一种更高层次的异步操作工具,它可以在后台线程中异步执行函数,并返回一个 std::future 对象,用于获取结果。它比手动创建线程更简单。

基本用法:

#include <iostream>
#include <future>
#include <chrono>int long_computation(int x) {std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟耗时操作return x * x;
}int main() {std::future<int> fut = std::async(std::launch::async, long_computation, 10); // 异步执行// 可以在这里做其他事情std::cout << "Doing other things while waiting for the result..." << std::endl;int result = fut.get(); // 获取异步任务的结果(会阻塞直到结果可用)std::cout << "Result: " << result << std::endl;return 0;
}

解释:

  • std::async(std::launch::async, long_computation, 10); 异步执行 long_computation 函数,并传递参数。
  • fut.get(); 获取结果并阻塞当前线程,直到结果可用。

总结

  • std::promise 用于设置异步操作的结果或异常。
  • std::future 用于获取异步操作的结果或异常。
  • std::packaged_task 封装函数为任务,并与 std::future 结合使用。
  • std::async 简化异步任务的创建和管理,自动处理线程和任务。

通过理解和使用这些 C++ 标准库组件,你可以更高效地进行异步编程,管理复杂的任务和线程操作。

http://www.jinmujx.cn/news/115167.html

相关文章:

  • 深圳网站建设 联雅网络杭州网站排名seo
  • jsp网站开发论文最近10个新闻
  • 做气球装饰可以上哪些网站手机如何制作网站
  • 中文做网站网络销售推广平台
  • wordpress外贸网站建设seo排名
  • 搜索引擎优化的技巧重庆百度推广优化
  • 单页营销式网站模板下载今日油价92汽油价格调整最新消息
  • 如果给公司做网站百度地图在线查询
  • 前端开发工程师招聘陕西seo排名
  • 个人帮忙做网站吗什么是搜索引擎竞价推广
  • 猪八戒网做网站如何付款网站建设seo优化培训
  • go 做视频网站宁波营销型网站建设优化建站
  • 学信网 的企业网站给你做认证百度竞价排名费用
  • 在网站上做教学直播平台多少钱企业官网seo
  • 做网站与运营大概多少钱百度卖货平台
  • 自己电脑做网站 带宽seo黑帽培训骗局
  • 广东做网站公司windows优化大师有必要安装吗
  • 欧美做爰爰爰爰网站数据查询网站
  • 网站后台如何修改新闻发布时间阿拉善盟seo
  • 在西安市建设工程交易中心网站上seo快速排名软件app
  • 网站建设收费标准百度竞价排名软件
  • 网站都是用什么语言写的如何让百度快速收录新网站
  • 高端建设网站建设今天热搜前十名
  • 做网站推广托管注意seo网站排名优化教程
  • 做自己的网站流量怎么百度识图网页版入口
  • 怎样自己做免费的网站口碑营销的优势
  • 移动网站打不开国内最新消息新闻
  • 厦门建网站费用一览表广州新塘网站seo优化
  • 国外网站案例深圳百度seo优化
  • 怎么做才能设计出好的网站西安网站制作推广