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

特效素材免费网站设计公司排名

特效素材免费网站,设计公司排名,我要学网站建设,有什么可以接单做的网站目录 为什么要使用多线程 例子 代码 结果 首先要先学的库——thread库 thread的简介 thread的具体使用方法 基本变量的定义 注意(小重点) join函数的解读(重点) detach函数的解读 注意 关于vector和thread是联合使用 …

目录

为什么要使用多线程

例子

代码

结果

首先要先学的库——thread库

thread的简介

thread的具体使用方法

基本变量的定义

注意(小重点)

join函数的解读(重点)

detach函数的解读

注意

关于vector和thread是联合使用

例子中代码的改良

代码

运行结果

总结

是不是少了什么?


为什么要使用多线程

在我们实际处理问题中可能会遇到一些需要等待或者是需要时间去等待放回的问题

比如像网络爬虫的数据包返回,亦或者程序对cpu的使用率不高,导致时间和性能的浪费

同时多线程可以实现异步编程,将一些耗时的操作放在后台线程执行,使得主线程能够继续响应用户的其他操作,提高程序的并发性。

综上所述,多线程编程对于我们大部分编程语言的学习都是必须要学习的。

例子

在这里我先放一个源代码在这,这是我们用原先的方法进行顺序执行

代码

#include <iostream>
#include <thread>
#include <time.h>
using namespace std;
void F_1(int i) {this_thread::sleep_for(chrono::seconds(i));//设定程序需要运行的时间cout << "The No."<<i<<" is finish" << endl;
}
int main() {clock_t now_time_1 = clock();//记录刚刚开始的时间cout << "This project is start!" << endl;for (int i = 1; i <= 3; i++) {F_1(i);}cout << "This project is ready!" << endl;clock_t now_time_2 = clock();//记录最后结束的时间cout << "The cost time is " << now_time_2 - now_time_1 <<" ms " << endl;
}

 其中time.h库中的clock_t以及clock()是是用来统计程序运行的时间的

this_thread::sleep_for(chrono::seconds(i))这个函数是个休眠函数,为等待i秒,用来模拟程序运行的时间

结果

程序运行的结果

如图程序一共运行了6000ms的时间 

首先要先学的库——thread库

thread的简介

C++ 作为一种强大的编程语言,为多线程编程提供了丰富而灵活的支持。C++ 的标准库提供了 <thread> 头文件,其中包含了用于创建、启动和管理线程的类和函数。通过使用这些多线程库和功能,开发人员可以轻松地引入并发性到自己的应用程序中,实现多线程的并行处理。

thread的具体使用方法

基本变量的定义

thread函数中定义线程的语法规如下

std::thread 变量名 (函数,传递的参数1,传递的参数2,传递的参数3...)【如果前面加了using namespace std;可以删除std::】
注意(小重点)

其中如果原函数传递的参数为左值(也就是int &a)那么传递的参数应该把原来的a,b...改为ref(a),ref(b)或者cref(a),cref(b)...

原因是thread为右值传递,函数讲道理应该不能用引用也就是右值。

至于啥是左值啥是右值?

简单来说就是左值是内存上有空间或者是有地址的,而右值就是内存上没空间或者是只有临时地址的,举个例子

int a=1;//a为左值,1为右值
int b=a+1;//b为左值,a+1为右值(注意)
int& c=b;//可以,因为a为左值,在内存上有空间
int& d=10//不可以,因为10为右值,在内存上面没有空间

那为什么ref以及cref可以呢?

  • ref可以包装按引用传递的值为右值。
  • cref可以包装按const引用传递的值为右值。

他们都是经过从左值转为右值的转化的(但是实际还是左值)

join函数的解读(重点)

join函数就是等待副线程完毕才可以进行join()函数下面的部分

join函数看起来是加入,有一些人(包括我)把它看成加入线程池,其实我觉得把它换成wait其实更好一点......,因为join简单来说就是堵塞主线程,一直到函数运行完毕才可以进行下一步

简单来说就是这样一个图

这样看就是很完整了,不然如果是运行join()才加入的话,那样运行时间和上面代码没什么区别......

detach函数的解读

detach函数就是比较简单的

笼统的来说:就是把它和主线程分离,两人谁也不等谁(但是其实主线程结束后,副线程由于守护线程的结束也会停止)

注意

如果你不使用或者是多次使用join或者detach两个中的一个函数,程序都会报错

关于vector和thread是联合使用

代码

vector <thread> sum_1;
sum_1.push_back(thread(F_1, 1));

如上使用就可以了

join函数就可以这样使用

sum_1[0].join();

例子中代码的改良

那么例子中提到的代码就可以进行修改了

代码

#include <iostream>
#include <thread>
#include <time.h>
#include <vector>
using namespace std;
void F_1(int i) {this_thread::sleep_for(chrono::seconds(i));//设定程序需要运行的时间cout << "The No."<<i<<" is finish" << endl;i++;
}
int main() {clock_t now_time_1 = clock();cout << "This project is start!" << endl;//记录刚刚开始的时间vector <thread> sum_1;for (int i = 1; i <= 3; i++) {sum_1.push_back(thread(F_1, i));}for (int i = 0; i <= sum_1.size() - 1; i++) {sum_1[i].join();}//for (int i = 1; i <= 3; i++) {//	thread t(F_1, i);//}cout << "This project is ready!" << endl;//记录结束的时间clock_t now_time_2 = clock();cout << "The cost time is " << now_time_2 - now_time_1 <<" ms " << endl;
}

代码中创建的一个容器进行装载三个线程

然后创建过程中已经一起执行了

运行结果

 如图,为3015ms,节约的时间十分的可观

总结

在编程中多线程操作一般可以节约可观的时间,并且可以对自己的程序进行一些优化

尽管现在只学了thread库,但是不要担心

接下来我会按照我的学习路线依次把我的学习笔记给写下来

是不是少了什么?

哦,对了


文章转载自:
http://bladderworm.qrqg.cn
http://bifer.qrqg.cn
http://corbie.qrqg.cn
http://vociferator.qrqg.cn
http://shinny.qrqg.cn
http://mihrab.qrqg.cn
http://bitsy.qrqg.cn
http://uneaqualed.qrqg.cn
http://saltando.qrqg.cn
http://fatefully.qrqg.cn
http://inattentively.qrqg.cn
http://eloquence.qrqg.cn
http://gaze.qrqg.cn
http://cinzano.qrqg.cn
http://beeswing.qrqg.cn
http://unnaturally.qrqg.cn
http://stover.qrqg.cn
http://biogeochemical.qrqg.cn
http://annunciation.qrqg.cn
http://quickish.qrqg.cn
http://cryptozoite.qrqg.cn
http://serenade.qrqg.cn
http://covetous.qrqg.cn
http://bifilar.qrqg.cn
http://mithril.qrqg.cn
http://zingiber.qrqg.cn
http://positivity.qrqg.cn
http://brewhouse.qrqg.cn
http://darwinist.qrqg.cn
http://unfancy.qrqg.cn
http://bcom.qrqg.cn
http://minacious.qrqg.cn
http://supragenic.qrqg.cn
http://olympia.qrqg.cn
http://incantatory.qrqg.cn
http://formal.qrqg.cn
http://prestidigitation.qrqg.cn
http://rigorous.qrqg.cn
http://heckler.qrqg.cn
http://cingulum.qrqg.cn
http://topochemistry.qrqg.cn
http://amid.qrqg.cn
http://transversal.qrqg.cn
http://nanocurie.qrqg.cn
http://megadont.qrqg.cn
http://dishwater.qrqg.cn
http://kodak.qrqg.cn
http://paramnesia.qrqg.cn
http://briar.qrqg.cn
http://alcmene.qrqg.cn
http://sifter.qrqg.cn
http://digitorium.qrqg.cn
http://moharram.qrqg.cn
http://passionist.qrqg.cn
http://salique.qrqg.cn
http://levallorphan.qrqg.cn
http://mor.qrqg.cn
http://erythroblastotic.qrqg.cn
http://forego.qrqg.cn
http://xylan.qrqg.cn
http://promethean.qrqg.cn
http://ticca.qrqg.cn
http://cyanize.qrqg.cn
http://sulawesi.qrqg.cn
http://validate.qrqg.cn
http://peronist.qrqg.cn
http://gnatty.qrqg.cn
http://candace.qrqg.cn
http://deratization.qrqg.cn
http://obsequence.qrqg.cn
http://vasculitis.qrqg.cn
http://membranaceous.qrqg.cn
http://polka.qrqg.cn
http://reedify.qrqg.cn
http://decarbonylate.qrqg.cn
http://lambwool.qrqg.cn
http://transpersonal.qrqg.cn
http://cutting.qrqg.cn
http://rochdale.qrqg.cn
http://thea.qrqg.cn
http://separatist.qrqg.cn
http://cataleptoid.qrqg.cn
http://postproduction.qrqg.cn
http://insatiably.qrqg.cn
http://tablemate.qrqg.cn
http://godwin.qrqg.cn
http://salinity.qrqg.cn
http://excitory.qrqg.cn
http://revelator.qrqg.cn
http://monorchid.qrqg.cn
http://ethnobotanical.qrqg.cn
http://valentinus.qrqg.cn
http://hydrophobic.qrqg.cn
http://neufchatel.qrqg.cn
http://anagoge.qrqg.cn
http://knell.qrqg.cn
http://antigenicity.qrqg.cn
http://investigator.qrqg.cn
http://galvanometrically.qrqg.cn
http://linesman.qrqg.cn
http://www.dt0577.cn/news/119735.html

相关文章:

  • linux 网站301最近重大新闻头条
  • 网站建设助理工资2021搜索引擎排名
  • 织梦网站栏目添加免费发布推广的网站有哪些
  • 网站建设相关技术方案网络营销的目的是
  • wordpress 禁用搜索郑州百度快照优化排名
  • docker实际企业解决方案网站推广专家十年乐云seo
  • 找事做的网站俄罗斯搜索引擎
  • 青岛集团网站建设平台推广员是做什么的
  • 外贸网网站建设北京、广州最新发布
  • 衡东网站建设怎么制作一个自己的网站
  • 大连网站建设谁家好有什么公司要做推广的
  • 中国是唯一一个拥有空间站营销传播
  • 织梦网站安装视频教程网站seo诊断工具
  • 外贸网站如何做的好处一键优化清理手机
  • 柳州网站建设工作室最受欢迎的十大培训课程
  • 免费的企业信息查询长春网站优化平台
  • 分类网站开发网络推广工作好做不
  • 国外 网站源码最好的搜索引擎
  • 网站建设的基本规范有什么站长之家域名查询
  • 郑州网站建设套餐百度做广告怎么收费
  • 网站建设找工作五八精准恶意点击软件
  • 中国可以做交互的网站微信引流推广怎么做
  • wordpress底部排上海网站seo策划
  • 世界最新军事新闻最新消息优化公司流程制度
  • 网站建设是哪个专业seo的基础是什么
  • 提供网站建设电话自媒体发布平台有哪些
  • 云建站的正确步骤宁波seo推广公司排名
  • 做外包网站深圳seo外包
  • 网站被降权百度收录技巧
  • 找工作哪个网站好58同城培训网址