文章目录

  • 一、前言
  • 二、实验的目的
  • 三、API
  • 四、代码
    • 4.1、main.h
    • 4.2、main.c
  • 五、Event Recorder调试
  • 六、细节补充
    • 6.1、线程属性成员attr_bits = osThreadDetached时,调用osThreadExit
    • 6.2、线程属性成员attr_bits = osThreadJoinable时,调用osThreadExit

一、前言

在实际项目上,有的线程只运行一次需要自动退出,有的线程当达到某些条件时也需要自动退出,并释放堆栈的内存。为满足这个需求,RTX5提供了一个API函数osThreadExit。
当在线程里调用osThreadExit时,有一些细节需要注意:

  1. 当线程的属性成员attr_bits为osThreadDetached时,在线程里调用osThreadExit,线程直接消失,并释放堆栈内存。
  2. 当线程的属性成员attr_bits为osThreadJoinable时,在线程里调用osThreadExit,线程从RUNNING(运行态)进入INACTIVE/TERMINATED(终止态),不释放堆栈内存。

二、实验的目的

通过长按按键KEY1,让Start线程退出。

三、API

按照官方的例子,在线程函数里直接调用osThreadExit()即可。

四、代码

4.1、main.h

4.2、main.c

线程属性成员attr_bits为 osThreadDetached。


五、Event Recorder调试

Event Recorder可以很方便调试RTX5。

六、细节补充

6.1、线程属性成员attr_bits = osThreadDetached时,调用osThreadExit

使用动态堆栈方式创建的线程被osThreadExit终止后,堆栈会被系统回收,被回收的内存可以被其他线程使用。静态堆栈方式(全局变量)创建的线程,堆栈不由RTOS系统管理。线程被osThreadExit终止后,内存无法被其他线程使用。

线程的成员变量attr_bits为osThreadDetached。当我长按按键KEY1时,Start线程直接消失了。此时,想要让线程重新运行起来,只能调用osThreadNew重新创建线程了。

6.2、线程属性成员attr_bits = osThreadJoinable时,调用osThreadExit

将线程属性成员attr_bits改为 osThreadJoinable。当KEY1长按时,Start线程并没有消失,只是进入终止态而已,等待下一次线程重新加入运行(osThreadJoin + osThreadNew)。

RTX5 | 线程管理03 - 线程退出osThreadExit相关推荐

  1. 《线程管理:线程基本操作》

    目录 线程管理 启动线程与(不)等待线程完成 特殊情况下的等待(使用trycath或rall) 后台运行线程 线程管理 启动线程与(不)等待线程完成 提供的函数对象被复制到新的线程的存储空间中,函数对 ...

  2. OpenGauss线程管理-系统日志线程-syslogger

    OpenGauss线程管理-系统日志线程-syslogger 系统日志(syslogger)出现在Postgres 8.0中.它通过重定向到管道来捕获postmaster.后端和其他子进程的所有std ...

  3. OpenGauss线程管理-主线程-Postmaster(1)

    OpenGauss线程管理-主线程-Postmaster(1) 主线程postmaster负责内存.全局信息.信号.线程池等的初始化,用来创建其他子线程,OpenGauss是单进程多线程,在程序启动时 ...

  4. OpenGauss线程管理-检查点线程-Checkpointer

    OpenGauss线程管理-检查点线程-Checkpointer 检查点线程处理所有检查点. 检查点会在自上一个检查点后经过一定时间后自动分派,并且它也可以发出信号以执行请求的检查点. (要求每隔这么 ...

  5. 二. 线程管理之线程池

    不忘初心 砥砺前行, Tomorrow Is Another Day ! 相关文章 一. 线程管理之Thread基础 二. 线程管理之线程池 三. 线程管理之ThreadLocal 四. 线程管理之A ...

  6. RTX5 | 线程管理04 - 线程加入osThreadJoin

    文章目录 一.前言 二.实验目的 三.API 四.代码 4.1.main.h 4.2.main.c 五.Event Recorder调试 一.前言 当线程的属性成员attr_bits为osThread ...

  7. python线程wait_python基础线程-管理并发线程

    线程模块建立在线程的底层特性之上,使线程的工作变得更简单.更像python.使用线程允许程序在同一进程空间中并发运行多个操作. 线程对象 使用线程最简单的方法是用目标函数实例化它,然后调用start( ...

  8. RTX5 | 线程管理05 - 线程挂起osThreadSuspend与线程恢复osThreadResume

    文章目录 一.前言 二.API 三.实验目的 四.代码 4.1.main.h 4.2.main.c 五.Event Recorder调试 一.前言 osThreadSuspend可以让线程A挂起,线程 ...

  9. c++并发编程(concurrency)----线程管理

    c++并发编程(concurrency)----线程管理 启动线程,指定线程运行函数的多种方法 等待线程执行完毕 唯一辨别线程的方法 如果已经有兴趣启动多线程程序了,那么问自己个问题,如何启动多线程? ...

最新文章

  1. 小黑盒不显示服务器,steam上买的游戏小黑盒不显示 | 手游网游页游攻略大全
  2. Redis:从应用到底层,一文帮你搞定
  3. centos 静态ip_CentOS 6 静态 IP 配置
  4. (Excel)常用函数公式及操作技巧之四:文本与页面设置(二)
  5. MODIS(TerraAqua)陆地标准产品
  6. 从老赖们“维权”,看拍拍贷的底色
  7. win7完整卸载oracle11,win7安装与卸载oracle11g(32)
  8. java string 日期_java string类型日期比较
  9. 「代码随想录」关于多重背包,你该了解这些!
  10. axhline函数--Matplotlib
  11. 山寨游戏之超级奥巴马(SUPER OBAMA WORLD)
  12. graphpad折线图教程_Graphpad Prism5作图教程
  13. 怎么换c语言程序窗口背景图,vc++如何给窗体添加背景图片
  14. dw做注册登录页面HTML代码,用DW做的简单的个人网站(可以用来当网页作业)
  15. cuba_认识CLI for CUBA平台
  16. 互联网券商线上开户系统设计与开发技术分享
  17. python 拆分pdf指定页,Python按页拆分pdf
  18. 知识产权律师介绍企业涉外法律服务
  19. 攻防世界writeup——Web(持续更新)
  20. 安装Python 出现0x80072f7d错误的解决办法

热门文章

  1. group by 和where 条件后面不能用刚设置的别名。
  2. java 对接支付宝支付
  3. nginx 负载均衡tomcat
  4. 【bzoj2761】【JLOI2011】【不反复数字】【平衡树】
  5. GdiPlus[47]: IGPMatrix 矩阵(二)
  6. 重新创建Activity
  7. 肿瘤坏死因子(TNF)阻断剂治疗幼年型银屑病关节炎: 有效吗
  8. 程序员|听说你们都很好说话?你做几件事,就知道了!
  9. 那些开发《虚拟光驱》的人们
  10. 程序员---不要对自己说“不可能”