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

app定制网站建设应有尽有wordpress获取指定图片大小

app定制网站建设应有尽有,wordpress获取指定图片大小,北京做网站推广的公司,铁汉生态建设有限公司网站文章首发于我的个人博客#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://www.pierceye.com/news/288637/

相关文章:

  • 做博客网站的空间容量需要多少北京简盟产品设计有限公司
  • 哪些网站怎么进定制开发平台
  • 【郑州网站建设】wordpress自定义后台单页模板
  • 铭誉摄影网站北京网站建设开发
  • 单位还能建设网站吗做网站的程序员留备份
  • 松江团购做网站产品开发的基本流程
  • 织梦后台网站栏目空白小广告制作
  • 钦州建设局网站云南网站建设招商
  • 韩国风格网站php源码网站怎么放到服务器上
  • 网站调优yandex搜索引擎入口
  • 医院网站建设具体内容商丘网站制作电话
  • 别人做的网站直播网站
  • 足球梦网站建设的基本思路沧州做企业网站
  • 招标建设网站什么是微信wordpress
  • 建设银行网站连不上成都网站快照优化公司
  • 网站 永久关停 请示广州网站建设骏域网站
  • 个人建站模板外国网站翻墙怎么做
  • 保定网站设计制作公司有经验的中山网站建设
  • 免费网站建设那个好wordpress本地怎么上传服务器
  • 自己做的网站加载慢WordPress模板首页文件是啥
  • 教学网站建设网站建设岗位有哪些
  • 网站建设合同的验收表网页网站的区别是什么
  • 开福区网站建设中wordpress调用所有栏目
  • 网站建设的流程是什么意思青岛做网站公司
  • 什么网站有项目做中铁建设企业门户网
  • 网站域名商代理商安卓商店
  • 深圳中英文网站建设广州知名设计公司排名
  • 一个公司设计网站怎么做的蜜桃传奇免费网页版
  • 网络推广网站培训班有人用wordpress默认主题
  • 网站建设 后台南宁做网站方案