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

网站开发的工作流程企业网站建设流程介绍

网站开发的工作流程,企业网站建设流程介绍,wordpress 主题 开源,网站信息报送制度建设std::future是用来接收一个线程的执行结果的#xff0c;并且是一次性的。 共享状态shared state future可以关联一个共享状态#xff0c;共享状态是用来储存要执行结果的。这个结果是async、promise、packaged_task设置的#xff0c;且这个结果只能设置一次。 创建future …std::future是用来接收一个线程的执行结果的并且是一次性的。 共享状态shared state future可以关联一个共享状态共享状态是用来储存要执行结果的。这个结果是async、promise、packaged_task设置的且这个结果只能设置一次。 创建future 创建future有四种方式 直接构造函数创建这种创建的future没用共享状态。 std::futureDataType future; 调用std::async返回一个future对象返回的future有共享状态。std::async是执行一个异步任务这个任务会放到线程池中的线程执行并通过future返回执行结果。通常异步任务优先考虑使用std::async而不是std::thread。 auto future std::async([]{return DataType{5}; }); std::cout future is Valid: future.valid() , async Result: future.get().n std::endl; 创建std::promise然后调用std::promise::get_future获取future对象返回的future有共享状态。promise可以设置一个值传递给future也可以设置一个异常传递给future。promise的set_value和set_exception 只能调用一次调第二次时会抛出异常。如果promise在析构前都未设置结果调用future::get获取结果会抛出异常。 {std::cout ------------- promise -----------------\n;std::promiseDataType promise;promise.set_value({5});// promise.set_value({6}); //set_value只能调用一次再次调用会抛出异常auto future promise.get_future();// auto future2 promise.get_future(); //get_future只能调用一次再次调用会抛出异常std::cout future is Valid: future.valid() , async Result: future.get().n std::endl;}{std::cout ------------- promise exception -----------------\n;std::promiseDataType promise;try {throw std::runtime_error(error);} catch (...) {// 如果调用了 promise.set_value 则不能调用 promise.set_exception // 否则 promise.set_exception 会抛出异常promise.set_exception(std::current_exception());}auto future promise.get_future();try {auto data future.get();std::cout future is Valid: future.valid() , async Result: data.n std::endl;} catch (const std::exception e) {std::cout e.what() std::endl;}}创建std::packaged_task然后调用get_futurestd::packaged_task::get_future获取future对象返回的future有共享状态。 std::cout ------------- packaged -----------------\n; std::packaged_taskDataType(int) task([](int a) {return DataType{a}; }); auto future task.get_future(); // auto future2 task.get_future(); //get_future只能调用一次再次调用会抛出异常 task(5); std::cout future is Valid: future.valid() , async Result: future.get().n std::endl; future状态 可以通过函数future::valid可以判断future是否有共享状态。如果有共享状态可以进一步通过函数future::wait_for(0s)来判读结果是否已经设置。wait_for有三个返回值 future_status::deferred 表示结果还未设置future_status::ready 表示结果已经设置future_status::timeout 表示超时 获取结果 通过future::get函数可以获取future的结果调用get函数需要注意以下几点 只有有共享状态的future才能获取结果如果没有共享状态会抛出异常。如果获取数据时future结果已经设置好则会立即返回。如果future状态还未设置好则会挂起线程一直等待直到结果被设置。如果相应async、promise、packaged_task到结束都一直未设置状态则会抛出异常。get函数只能调用一次调用完成后则会删除共享状态再次调用get函数会因为没有共享状态而抛出异常。 也可以调用waitwait_for, wait_until等带结果被设置。 多线程调用future 获取future结果时可以先判断future是否有共享状态然后再调用get函数获取结果代码如下 if (future.valid()){future.get();} 上面代码在单线程调用没有问题如果在线程同时调用则会有问题多个线程会同时判断future有共享状态因此同时有多个线程调用get函数而get函数只能被调用一次从而引发异常。 可以通过加锁解决这个问题但这并不是好的方法。更优雅的方法是通过future::share函数为每个线程创建一个std::shared_future。future调用完share将不再拥有共享状态如下 如果future本身没有共享状态调用share会生成一个没有共享状态的shared_future。 shared_future调用get函数时并不会清楚共享状态所以shared_future可以多次调用get函数。 示例代码 std::promiseDataType promise;auto future promise.get_future();auto shadedFuture future.share();std::cout future is valid: future.valid() std::endl;std::thread threads[4];for (int i 0; i 4; i){threads[i] std::thread([futureshadedFuture](int i){std::cout std::to_string(i) , future is Valid: std::to_string(future.valid()) , async Result: std::to_string(future.get().n) \n;}, i);}std::this_thread::sleep_for(std::chrono::milliseconds{100});promise.set_value({5});for (int i 0; i 4; i){threads[i].join();}std::cout std::endl; future析构阻塞 当future是由async创建的且future/shared_future是最后一个指向共享状态的future如果async还在执行则future在析构时会阻塞当前线程等待async执行完成。
http://www.zqtcl.cn/news/712083/

相关文章:

  • j动态加载网站开发南京建设网站公司哪家好
  • 云南网站建设工具wordpress防御ip攻击
  • 珠海市网站建设开发公司站长工具whois查询
  • 网站备案icp过期网站建设好了怎么做推广
  • 网站自动识别手机代码网络服务器是指
  • 做自媒体那几个网站好点乐清做网站建设
  • 如何制作自己的网站在线观看2021网页源码
  • 电子商务网站建设百度文库工业设计公司招聘
  • 网站seo测评餐厅设计公司餐厅设计
  • 深圳网站seo推广wordpress swf 上传
  • 织梦做双语网站怎么做制作网站的教程
  • 公司网站开发的国内外研究现状个人网页设计大全
  • 做一个网站人员网站建设及推广优化
  • 胶州市城乡建设局网站能进封禁网站的浏览器
  • 网站做几级等保荣耀商城手机官网
  • 营销网站费用渭南网站建设公司
  • wordpress主题集成插件下载网站如何做360优化
  • 有什么在线做文档的网站网站开发需要用到哪些技术
  • 网站套餐可以分摊吗吗移动登录网页模板免费下载
  • asp网站会员注册不了但是打不开网页
  • wordpress 中文网店杭州排名优化公司
  • wordpress建站安全吗wordpress企业主题教程
  • 网站构建的开发费用信息管理系统网站开发教程
  • 自己做网站怎么维护wordpress素材模板
  • 如何选择一个好的优质网站建设公司wordpress 主题小工具
  • mysql数据库做网站广州网站seo地址
  • 福建省住房和城乡建设厅网站电话网站开发项目步骤
  • 网站注册域名多少钱淘宝网商城
  • 做架构图的网站网站和网店的区别
  • 做红包网站简单个人网站设计