之前那片文章简述了如何使用C++多线程。
C++多线程模拟就好像是自己在做一件事情,但是感觉不够快,就跟自己的朋友说,在自己做的这一部分的时候,你去帮我做另外一部分,那么这样就提高了效率。

(点击可查看)在这篇文章中,我们可以看出用endl是比直接写\n要慢的。所以,我这个要这个特点来展现多线程的过程。

我们不妨来看一下这段代码:

#include <iostream>
using namespace std;
#include <thread>
void hello() {for (int i = 0; i < 5; ++i) {cout << "In hello()"<< i << endl;}
}
int main() {thread t(hello);cout << "Before join()\n";t.join(); // 表示在新开的那个进程不结束之前,本进程也是不会结束的cout << "After main()\n";system("pause");
}

这个代码,我就是在之前的那个版本上进行改进而得到的。在此,我故意在main函数中的部分,使用\n,在hello()函数中用endl。然后接下来,我们会看看输出的结果,这样来体会下join()函数。

原理:因为,我们知道了\n要比endl输出的要快。那么可以看到main函数肯定是要比hello函数要输出的要快的。

可以看出,Hello跟Before应该是差不多时间出现的,但是之后的After main()是在之前的函数都已经完成之后才出现了。

于是,我们可以猜测,join函数就好像做了限制,就是在这个打开的进程要先完成之后,原来的进程才动。

但具体还是要验证下:我们将join给关掉。(也就是把这句话给注释掉)

改完的代码如下:

#include <iostream>
using namespace std;
#include <thread>
void hello() {for (int i = 0; i < 5; ++i) {cout << "In hello()"<< i << endl;}
}
int main() {thread t(hello);cout << "Before join()\n";//t.join(); // 表示在新开的那个进程不结束之前,本进程也是不会结束的cout << "After main()\n";system("pause");
}

然后我们再看输出

发现了没有,这个main是先自己做好了。但由于我在VS上为了现实,我都是加了system("pause")将框给停下来的,不然的话,这个其实会有点隐患的,毕竟自己你认为这个主函数结束了,所有的程序都结束了,但是实际上却是有程序还在运行,这样不就是很冒险么?

  • 不过在主程序的运行的很快,所以导致在这连这个endl都还没有运行完的时候,就main所有的都结束了。所以就会有那个空行。

C++多线程简单入门(二)(Windows版)相关推荐

  1. C++多线程简单入门(Windows版本)

    C++多线程(windows下) 下面是在VS上的打的代码. <thread>,这个是c++11的库了 要是想要在Linux上实现多线程,用的库是<pthread> 要是在wi ...

  2. MYO肌电臂环中文入门指南(Windows版)

    (图片版权归MYO所有) 在Windows上开始使用Myo 我们已经使Myo Connect的安装过程变得简单!这个简单的在线指南将指导您完成所有必要的步骤以及入门指南. Myo Connect支持W ...

  3. 阿里云服务器配置与使用入门(windows版)

    写在前面:这里只是个人学习使用,所以系统装了Windows,企业级开发就不要在这里浪费时间了 1.注册.登录.实名认证.购买 普通购买:https://ecs-buy.aliyun.com/wizar ...

  4. mysql触发器的简单入门(二)

    2019独角兽企业重金招聘Python工程师标准>>> 第一篇链接 https://my.oschina.net/aijiaoer0624/blog/1529475 先贴上代码: C ...

  5. iOS CoreData简单入门 - Swift版

    CoreData --- Swift 1,创建IOS项目并选择使用CoreData,选择语言Swift 2,打开项目目录 会有一项 CoreDataDemo.xcdatamodeld ,打开它,添加 ...

  6. 零基础 Amazon Web Services (AWS) 入门教程图文版(二)

    上一篇讲到,主机正常运转了.但是此时如果直接访问公网IP是打不开网页的,因为主机上没有搭建Web服务器环境,防火墙也没有开放80端口,并且我们没有上传任何网页文件.所以这一篇主要介绍服务器环境的搭建. ...

  7. C++多线程快速入门(五)简单线程池设计

    目录 设计思路 主线程运行逻辑 task以及taskpool设计 详细流程讲解 完整代码 打印结果 往期回顾 设计思路 线程池实际上就是一组线程,当我们需要异步执行一些任务时,经常要通过OS频繁创建和 ...

  8. Git快速入门篇—— Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程)

    Git快速入门篇-- Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程) 前言:我们平时在整理代码的时候,尤其是与别人一起开发项目的时候,常常涉及到代码的更新,因此代码版本问 ...

  9. [WinForm]Windows程序(非网页) #2 -- 跨平台的 ADO.NET程序(简单入门)

    这是我的文章备份,有空请到我的网站走走, http://www.dotblogs.com.tw/mis2000lab/ 才能掌握我提供的第一手信息,谢谢您. http://www.dotblogs.c ...

最新文章

  1. gitk、Git GUI 图形化工具中文显示乱码的解决方案
  2. 逻辑电路 - 与非门Nand Gate
  3. java实例方法,Java实例和静态方法
  4. 参加金蝶OperaMasks-WebFramework成都推广活动后的感想
  5. Oracle-RAC等价性验证错误:Result: PRVF-4007 : User equivalence check failed for user grid
  6. 电脑工具栏怎么调整到下面_雷电模拟器4.0怎么玩召唤与合成 一键下载轻松游玩 - 工具软件...
  7. 电脑生成siri语音_米家智能台灯1S全新升级,支持小爱和Siri的语音控制
  8. 解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions(译)
  9. 35岁,程序员过不去的坎?
  10. C# web调用控制台应用程序
  11. 解构领域驱动设计--思维导图
  12. 中国各省的简称及简称的由来
  13. 虚拟机安装Mac OS系统
  14. Unity创建渐变背景
  15. 计算机配置35%卡住不动了,大师教你win7 update更新卡住35%不动应该怎么解决
  16. java timsort_JDK(二)JDK1.8源码分析【排序】timsort
  17. 室内电子地图-自定义室内地图-室内地图在线工具
  18. LVDS接口测试工装研究
  19. iPhone App创建与审核步骤二:如何在developer.apple.com网站中设置App预览和截屏以完成App上架
  20. iOS App 自动登录的安全性分析

热门文章

  1. oracle 连接池sql跟踪,实现SQLServer、MySQL和oracle数据库连接池
  2. 阿里重磅发布大规模图神经网络平台AliGraph,架构算法解读
  3. 2018年,JavaScript都经历了什么?
  4. chrome 常用快捷键(可以摆脱鼠标哦)
  5. 使用 Intel HAXM 为 Android 模拟器加速,媲美真机(转)
  6. 【转】C# typeof()实例详解
  7. .net学习之委托和事件
  8. ORA-01940,删除某用户的所有对象
  9. 一种获取过程调用堆栈信息的简单方法
  10. 显示内容长时,显示部分内容,鼠标移入显示全部内容