搜索
bottom↓
回复: 4

关于RT-Thread线程挂起后还会运行的一个问题

[复制链接]

出0入0汤圆

发表于 2011-11-30 14:43:36 | 显示全部楼层 |阅读模式
在使用RT-Thread使用中发现一个问题,有些挂起的线程还会运行,不知道为什么。

我的应用是这样的:创建了三个线程,1:自动运行,2:手动运行,3:设置参数,任何时候只能有一个线程运行,即自动运行时不允许手动运行和设置参数,手动运行时不允许自动运行和设置参数,以此类推。三个线程通过按键切换,即按下按键从自动运行切换到手动运行,再按下按键切换到设置参数

我的做法是:在自动运行线程检测到按键按下,唤醒手动运行线程,挂起自动运行线程,执行线程调度
但发现,即使自动运行线程挂起后,它还会运行,查看编程指南,发现下面一段话:

(原文件名:线程挂起.jpg)

也就是说,即使一个线程挂起了,它还会进入就绪态,继续运行?如果像我这样的应用,该怎么做?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2011-11-30 23:12:11 | 显示全部楼层
ffxz能否指点一二?

出0入0汤圆

发表于 2011-12-5 18:19:05 | 显示全部楼层
如果你的自动运行的线程优先级最高,那么肯定还会继续运行,因为挂起的任务还是处于就绪状态。如果你想要这样切换,不如使用信号量或者事件来强制切换,自动运行的线程检测到按键之后创建手动运行的线程,并且运行,之后等待一个信号量或者对应的事件,而这个信号量或者事件是在按键中断里面发送的。通过按键中断记录案件的次数,然后根据不同的次数发送不同编码的事件。然后不同的任务接受这个事件来运行。

出0入31汤圆

发表于 2011-12-5 18:47:06 | 显示全部楼层
这是一个线程同步问题

出0入0汤圆

 楼主| 发表于 2011-12-6 15:55:30 | 显示全部楼层
回复【2楼】tiancaigao7  天才杨威利
如果你的自动运行的线程优先级最高,那么肯定还会继续运行,因为挂起的任务还是处于就绪状态。如果你想要这样切换,不如使用信号量或者事件来强制切换,自动运行的线程检测到按键之后创建手动运行的线程,并且运行,之后等待一个信号量或者对应的事件,而这个信号量或者事件是在按键中断里面发送的。通过按键中断记录案件的次数,然后根据不同的次数发送不同编码的事件。然后不同的任务接受这个事件来运行。
-----------------------------------------------------------------------
这是个好主意,谢谢你的帮忙
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-11 20:03

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表