1:程序如何开始

  1. 编译链接时的引导代码:操作系统性在执行main函数前其实也要先执行一段引导代码才能执行main,链接时由连接器将编译器中事先准备好的引导代码给链接进去和我们的应用程序一起构成最终的可执行程序。
  2. 运行时的加载器:加载器是操作系统中的程序,当我们执行一个程序时(譬如./a.out,譬如代码中用exec族函数来运行时)加载器负责将这个程序加载到内存中去执行这个程序。
  3. 程序在编译时用到链接器,运行时用加载器,这两个东西对程序运行原理非常重要。
  4. argc和argv的传参如何实现

先传送到加载器再到引导代码在传给main()函数

2:程序如何结束

  1. 正常终止:return、exit、_exit
  2. 非正常终止:自己或他人发信号终止进程

3:主线程main()函数执行

  1. 主线程main()函数开始执行,那么我们自己创建的线程,也需要从一个函数开始运行(初始函数),一旦这个函数运行完毕,就代表我们这个线程运行结束。
  2. 整个进程是否执行完毕的标志是:主线程是否执行完,如果主线程执行完毕了,就代表这个进程执行完毕了,此时如果其他字线程还没执行完,也会被强行终止。
  3. 所以,一般情况下,如果想保持子线程(比如自己创建的线程)的运行状态,就要让主线程一种保持运行,不要让主线程运行完毕。
// mian.cpp#include<iostream>
#include <thread>void myJob()
{std::cout << " 我的线程开始了" << std::endl;std::cout << " 我的线程执行完毕" << std::endl;
}
int main()
{//thread是一个类,创建一个类对象myobj// 打印 myJob 线程std::thread myThread(myJob);std::cout << "myJob线程:" << myThread.get_id() << std::endl;myThread.join();// 打印主线程std::cout << "主线程:" << std::this_thread::get_id() << std::endl;std::cout << " I love China" << std::endl;return 0;
}

std::thread myThread(myJob);

这条语句包括以下要点:

  1. thread是一个类,创建一个类对象myThread,而myJob为可调用对象(作为实参去构造myThread对象)
  2. 创建了线程,线程执行起点(入口)是myJob;
  3. myJob线程开始执行(即运行到这条语句时,子线程就开始执行了)

对于myThread.join();,这条语句包括以下要点:

  1. join():汇合,即阻塞,阻塞(当前线程)主线程,让(当前线程)主线程等待子线程执行完毕,然后子线程和子线程汇合,然后主线程再往下走。
  2. 即主线程阻塞到这里等待myJob()执行完,当子线程执行完毕,这个jion就执行完毕,主线程就继续往下走。
  3. 一句话:阻塞主线程并等待子线程执行完

参考文献

C++线程运行的开始和结束(代码演示)_咩咩要学习的博客-CSDN博客_开始代码和结束代码

C++:程序运行的开始和结束相关推荐

  1. C语言输入end时结束程序,给大家一个程序,输入多个字符串以END结束后排序,这个程序运行,即结果都是对的。...

    给大家一个程序,输入多个字符串以END结束后排序,这个程序运行,即结果都是对的. /*输入多个字符串以END结束后排序*/ #include #include main() {char a[20][3 ...

  2. 结束任务管理器快捷键是什么?怎么结束电脑程序运行?

    当我们想关闭一个运行中的任务又关闭不了时,该怎么办?怎么结束电脑程序运行?可以用任务管理器,而结束任务管理器快捷键又是什么?这就是今天本文想要分享的内容,下面一起来看看吧! 步骤1.你需要用按住键盘上 ...

  3. python mac程序结束发出声音,Python程序运行结束如何加入提示音

    满意答案 size1220 推荐于 2017.12.16 采纳率:44%    等级:9 已帮助:465人 #以下都是基于win xp+py 2.x;其他操作系统及py3.x没试过... 1.电脑蜂鸣 ...

  4. C语言程序设计——结构体的运用 完成对输入的字符串中C关键词的查找统计。程序运行示例如下:本程序将为您统计C语言的关键字的个数,请输入,输入end结束输入:

    完成对输入的字符串中C关键词的查找统计. 程序运行示例如下: 本程序将为您统计C语言的关键字的个数,请输入,输入end结束输入: if do while while do break goto hel ...

  5. 查询在应用程序运行得很慢, 但在SSMS运行得很快的原因探究

    原文:查询在应用程序运行得很慢, 但在SSMS运行得很快的原因探究 查询在应用程序运行得很慢, 但在SSMS运行得很快的原因探究 -理解性能疑点 1      引言 内容来自http://www.so ...

  6. c++读取声音文件之后回音_一段程序运行之后,输出的内容就是这段程序本身。...

    在通过了Adalab的入学赛选挑战者赛之后,Adalab联合创始人 @小熊 给我出了一道加式题: 用你最擅长的语言写一段程序,这段程序运行之后,输出的内容就是这段程序本身. 第一眼看到这个题目, 我就 ...

  7. java计算程序运行时间_C#里面的时间,如何计算一个程序运行花费的时间

    有时候我们需要知道我们的程序性能怎么样, 运行的快不快 就像我们跑步一样,我们看谁跑的快. 在起跑线的时候,发令枪一响,我们按下开始 等过了终点线,我们按下结束 这中间的时间间隔,就是我们奔跑的时间. ...

  8. C++运行时候库操作概述和整个程序运行流程

    一.任何一个C/C++程序,它的背后都是一套庞大的代码来进行支撑,以使得该程序能够正常运行.这套代码至少包括入口函数.及其依赖的函数所构成的函数集合.当然,它还应该包括各种标准函数(如字符串,数学运算 ...

  9. c语言 判断一个图是否全连通_C语言:程序运行流程图与顺序结构语句

    程序运行流程图 流程图是描述问题处理步骤的一种常用图形工具,它是由一些图框和流程线组成的.流程图描述问题的处理步骤,形象直观,便于阅读.画流程图时必须按照功能选用相应的流程图符号,常用的流程图符号如下 ...

最新文章

  1. 博科VP:闪存推动了与之相匹配的第六代FC的发展
  2. python程序多线程_Python-多线程编程
  3. 【风险管理】风控一二三
  4. Spring容器初始化和bean创建过程
  5. 判断是不是素数python_Python 判断是否为质数或素数的实例
  6. 关于iOS里的做动画方法的差别与注意事项
  7. 17 年安全界老兵,专注打造容器安全能行吗?
  8. 【独家揭秘】阿里怎么做双11全链路压测?| CSDN 博文精选
  9. Tomcat 服务:解决 Apache Tomcat 更新后 Tomcat9w.exe 无法启动 Tomcat 服务的问题
  10. 怎样搭建本地svn服务器环境-轻松掌握版本管理
  11. Delphi 7生成XML
  12. 知乎“下沉”,快手“上游”
  13. Go语言中的复合类型及面向对象思想
  14. RAC以及ASM安装全过程整理
  15. UVC1.5协议 2
  16. Echarts绘制中国地图
  17. JS编程建议——16:防止switch贯穿
  18. 本周最新文献速递20210815
  19. VUE入门-VUE初识者的福音
  20. MCAL_VADC配置

热门文章

  1. 前端页面实现时钟效果
  2. 启动MySql服务出现系统错误 193
  3. 激活函数Relu 及 leakyRelu
  4. 时空图神经网络阅读笔记
  5. 2018年,阿迪达斯大中华区销售额实现23%强势增长
  6. 全新Thinkphp开发App网络授权验证系统源码
  7. 奇迹世界服务器架构(2)
  8. 实验一:传智播客设计学院简介
  9. Cocos 人才在线教育专场招聘 | 12月岗位
  10. BI数据分析师技能培训与实践——掌握数据分析核心技能,实现企业业务价值的最佳实践