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

做网站要服务器和什么定制开发app软件

做网站要服务器和什么,定制开发app软件,做网站需要哪些条件,形容网站做的好文章首发于我的个人博客#xff1a;欢迎大佬们来逛逛 文章目录 处理带返回值的函数asyncpackaged_taskpromise 处理带返回值的函数 有三种方法#xff1a; asyncpackaged_taskpromise async 第一种方法是使用 async 函数。 步骤#xff1a; 使用 async 创建线程处理函… 文章首发于我的个人博客欢迎大佬们来逛逛 文章目录 处理带返回值的函数asyncpackaged_taskpromise 处理带返回值的函数 有三种方法 asyncpackaged_taskpromise async 第一种方法是使用 async 函数。 步骤 使用 async 创建线程处理函数使用 .get() 获取返回值。 async函数具有两个属性 launch::async默认表示创建线程处理函数并且立刻执行launch::defered延期当使用wait或者get的时候才会执行线程处理函数 async函数的返回值std::future 类型通过调用其 get 方法获取返回值 下面分别演示了普通函数与类的成员函数以及 defered 的作用 int value1(int num) {return num; }//类对象 class Foo { public:Foo() {}int getValue(int num) {std::chrono::milliseconds duration(2000);std::this_thread::sleep_for(duration);return num * 2;} };void testAsync() {//直接执行默认是launch::asyncstd::futureint res1 std::async(value1, 100);std::cout res1.get() \n;Foo m{};//类成员函数std::futureint res2 std::async(Foo::getValue, m, 200);std::cout res2.get() \n;//不会立刻执行auto res3 std::async(std::launch::deferred, Foo::getValue, m, 400);//调用get执行线程std::cout res3.get() \n; }packaged_task 第二种方法是使用 packaged_task 方法 步骤 使用 packaged_task 来包装线程处理函数然后将这个包装好的函数加入到线程 thread 中并且执行线程处理函数最后使用这个 packaged_task 调用 get_future 来获取 future然后调用 get 获取值。 package_task 函数包装语法 //包装普通函数 std::packaged_task返回类型(形参列表) pack1(函数名称);//包装类的成员函数 std::packaged_task返回类型(形参列表) pack2(bind(函数地址成员变量地址placeholders占位符))//包装lambda表达式 std::packaged_taskint(int) pack3([](形参列表){xxxxreturn xxx; });可以看到对于类的成员函数是相对比较复杂的。 void testPackaged_task() {//1. 普通函数的包装std::packaged_taskint(int) pack1(value1);std::thread t1(std::ref(pack1),100); //转换为t1.join();std::cout pack1.get_future().get() \n;//2. 类中成员函数的包装Foo m{};std::packaged_taskint(int) pack2(std::bind(Foo::getValue, m, std::placeholders::_1));std::thread t2(std::ref(pack2), 200);t2.join();std::cout pack2.get_future().get() \n;//3. lambda表达式std::packaged_taskint(int) pack3([](int num) {std::cout id: std::this_thread::get_id() \n;return num * 2;});std::thread t3(std::ref(pack3),300);t3.join();std::cout pack3.get_future().get() \n; }promise 第三种方法是使用 promise 类型 步骤 传递 promise 类型的变量到线程处理函数中。我们正常执行线程处理函数即可无需使用return语句在操作完成后把需要的值 set_value 设置为promise 的值。然后使用 thread 创建并且执行线程处理函数。然后我们就可以在外部使用 .get_future 获取 future对象 继而 .get 获取值。 这种方法的特点 无需显示设置 return 语句需要往线程处理函数添加一个额外的 promise 类型的参数。 例如这个是我们的线程处理函数我们需要返回 num *3 但是现在我们添加一个promise 类型的参数注意是引用然后直接 set_value 即可然后再外部就可以直接访问这个值了。 void testThread(std::promiseint pms, int num) {std::cout get_id() \n;pms.set_value(num * 3); }返回线程处理函数的值 std::promiseint pms; std::thread t1(testThread, std::ref(pms), 100); t1.join(); auto num pms.get_future().get(); std::cout num \n;这种方法也可以传递线程的值到另一个线程处理函数中 有一个 testGetValueThread 线程函数我们需要把刚才获取的 num*3 的值再传递进去则可以在这个线程函数内调用 .get_future().get() 来传递参数。 下面是两种方法这里使用了函数重载作为线程处理函数需要使用static_cast来避免重载歧义。 通过static_cast消除重载函数的歧义 void testGetValueThread(std::promiseint pms) {std::cout 获取值: pms.get_future().get() \n; } void testGetValueThread(int num) {std::cout 获取值: num \n; }...std::promiseint pms2;pms2.set_value(99);//值传递到其他线程中//通过static_cast消除重载函数的歧义std::thread t2(static_castvoid(*)(std::promiseint)(testGetValueThread), std::ref(pms2));t2.join();std::thread t3(static_castvoid(*)(int)(testGetValueThread), num);t3.join();
http://wiki.neutronadmin.com/news/388617/

相关文章:

  • wordpress视屏站网站给他人做付刑事责任
  • 公司网站建设制度网站不做icp备案
  • 网站ip地址查询宁波论坛招聘
  • 建设网站能赚钱网页设计与网站建设入门到精通
  • 广州好蜘蛛网站建设网站做第三方支付
  • 企业网站建设作品分析wordpress适配手机端
  • 织梦门户网站源码下载万网云服务器怎么上传网站吗
  • 提供网站建设收益分录交互设计是做什么的
  • 广州百度网站建设公司肥西县建设局网站
  • 网站开发 需求清单lnmpa wordpress ssl
  • 自己建设网站容易吗网页美工设计网站
  • 建网站非要做外链吗景观园林设计公司
  • asp网站源码后台密码存放在那个文件里?腾讯企业邮箱好用吗
  • 整站优化推广主备网站服务器自动切换 win2003
  • 网站上怎么做弹幕效果图建设部网站2015年第158号
  • 做折扣的网站快手流量推广网站
  • 试客那个网站做的好代写文案平台
  • saas建站 彩页权威的营销单页网站
  • 展会网站制作上海seo推广平台
  • 免费网站建设apk商标 做网站 是几类
  • 网站不用域名需要备案吗如何查看网站域名解析
  • 合肥seo网站推广费用网站可不可以做自己的专利
  • 校园网站 建设 意义wordpress已停止访问
  • 网站更换域名中小微企业查询官网
  • 网站安全建设架构电脑版cad免费怎么下载
  • 网站在建设中页面公司做网站需要网站维护人员吗
  • 大连开发区做网站的公司wordpress第2页未找到
  • 金环建设集团有限公司官方网站网络营销做得好的公司
  • 医疗软件网站建设html成品网页模板下载
  • 网站栏目结构设计网站有吗免费的