C++主线程与子线程的关系

一、主线程和子线程执行顺序

  在C++中main函数是程序运行便会执行,即是主线程。在此之后创建的线程属于子线程。那么问题来了,主线程和子线程谁的优先级更高?

  主线程总是能优先获得CPU资源,且主线程执行完后,程序(即进程)也就执行完了,这时子线程会被迫结束。

二、如何控制执行顺序

  如果想要先执行子线程,然后再执行子线程应该如何做?

  使用Windows.h提供的Sleep()函数。

  通俗地说,当我们调用Sleep函数时,比如Sleep(100),它会提醒系统,执行它需要花费100ms,让CPU在时间片有大于等于100ms的时间时唤醒当前进程,先执行其它线程。意味着也就是放弃它剩余的时间片(就是放弃本次运行)。但是Windows操作系统并不是一个实时的操作系统,所以就算时间片大于等于100ms也并不一定执行该线程,这取决于当前CPU正在进行什么操作。

  简单的理解为主线程如果开启Sleep函数,意味着放弃当前运行,让CPU先执行子线程。

TIPS:Sleep函数并不能保证线程按照某个顺序执行。线程和线程之间仍然是相互独立的执行。

C++主线程与子线程的关系相关推荐

  1. 多线程——主线程和子线程退出关系

    分清两个概念 主线程和当前进程的关系:当前进程由主线程和若干个子线程组成. 若当前进程退出后,子线程也会跟着一起退出:若只是主线程退出,仍要分两种情况分析:实际上主线程退出后子线程的状态依赖于它所在的 ...

  2. 主线程和子线程的关系(讨论主线程结束,子线程是否要回收)

    主线程和子线程,在操作系统里面其实是一样的,没有本质区别.至于主线程结束,子线程是否要回收,下面有两种比较特殊的情况. 第一种: 主线程退出了,子线程还可以执行. 主要是因为pthread_exit函 ...

  3. C#/.NET主线程与子线程之间的关系

    以前一直没有在程序中写过总结,再翻开程序时却不知所云,所以我决定写总结         一般 一个应用程序就对应一个进程,一个进程可有一个或多个线程,而一般有一个主线程. 有的博客上说"至少 ...

  4. c语言主线程退出子线程,简单了解C语言中主线程退出对子线程的影响

    这篇文章主要介绍了简单了解C语言中主线程退出对子线程的影响,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 对于程序来说,如果主进程在子进程还未结束时 ...

  5. Java多线程面试题之如何让主线程等子线程执行完之后再执行

    问题描述 现在有一个主线程X,和两个子线程A和B,A和B之间没有依赖关系且两者的执行时间不确定,现在要求如下: 1:不限制A和B执行顺序的 2:主线程X需要在子线程A和B执行完成之后再执行 方案1 1 ...

  6. 多线程之:主线程、子线程

    1.进程中线程之间的关系 线程不像进程,一个进程中的线程之间是没有父子之分的,都是平级关系.即线程都是一样的, 退出了一个不会影响另外一个. 但是所谓的"主线程"main,其入口代 ...

  7. 主线程和子线程的区别,线程之间的通信

    1.主线程来向子线程发送消息的方法 在平时写程序时,我们一般都是在子线程中向主线程发送消息,从而完成请求的处理,这个很常见,不用多说了.那么有时候,我们也可能碰到这样子的一种需求:需要主线程来向子线程 ...

  8. android判断主线程_Android主线程和子线程区别详解

    主线程和子线程的区别 每个线程都有一个唯一标示符,来区分线程中的主次关系的说法. 线程唯一标示符:Thread.CurrentThread.ManagedThreadID; UI界面和Main函数均为 ...

  9. c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划

    作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...

  10. Android线程之主线程向子线程发送消息

    和大家一起探讨Android线程已经有些日子了,谈的最多的就是如何把子线程中的数据发送给主线程进行处理,进行UI界面的更新,为什么要这样,请查阅之前的随笔.本篇我们就来讨论一下关于主线程向子线程如何发 ...

最新文章

  1. Spring踩坑记录
  2. UI控件无法响应点击等事件的探索
  3. Github拉取远端的时候提示“ssh: connect to host github.com port 22: Connection timed out”错误...
  4. Log4j2的性能为什么这么好?
  5. 产品经理成长三五事儿:搭建自己的成长模型
  6. python中str用法_python中的str()不能直接用吗 -问答-阿里云开发者社区-阿里云
  7. ComponentBase.createMetaData and manifest.json oRoute
  8. LeetCode 99. 恢复二叉搜索树(中序遍历)
  9. linux下如何为redis配置path,linux环境下如何启动redis
  10. Sentinel降级_异常数_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0041
  11. Scikit-learn库中的数据预处理(一)
  12. c++使用unordered_map与map的区别
  13. android flash游戏播放器代码,新flashplayer游戏播放器apk-新Flash游戏播放器(NEW Server Mode)预约V4.2安卓版-西西软件园...
  14. 用线性同余法生成伪随机数
  15. 第八章 项目质量管理
  16. 好多游戏,大部分都有修改器,大家赶紧下!
  17. 科学计算机求年金,科普如何科学使用普通计算器(CPA考试小技巧)
  18. 从 0 开始学支付系统搭建——解析「核算对账核心」
  19. “全球化”是一个漫长过程,海尔智家用了20年
  20. 十个全网最具创意的聊天机器人:漫威和联合国儿童基金会都在尝试使用聊天机器人...

热门文章

  1. pytorch-----使用Module类来自定义模型
  2. 图论算法——无向图的深度优先搜索和广度优先搜索
  3. iPhone SDK开发基础之 OpenFlow编程
  4. Oracle J.D.Edwards技术与应用
  5. 《嵌入式系统Linux内核开发实战指南(ARM平台)》书评
  6. pandas小记:pandas高级功能
  7. android实现应用程序只有在第一次启动时显示引导界面
  8. mysql 加密 en_MySQL8.0 的表空间文件加密控制
  9. 蓝桥杯2020年第十一届Python省赛第五题-排序
  10. ubuntu 18.04忘记登录密码的破解方法