guanxihui 发表于 2011-11-30 14:43:36

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

在使用RT-Thread使用中发现一个问题,有些挂起的线程还会运行,不知道为什么。

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

我的做法是:在自动运行线程检测到按键按下,唤醒手动运行线程,挂起自动运行线程,执行线程调度
但发现,即使自动运行线程挂起后,它还会运行,查看编程指南,发现下面一段话:
http://cache.amobbs.com/bbs_upload782111/files_48/ourdev_700245CJCG2G.jpg
(原文件名:线程挂起.jpg)

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

guanxihui 发表于 2011-11-30 23:12:11

ffxz能否指点一二?

tiancaigao7 发表于 2011-12-5 18:19:05

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

zchong 发表于 2011-12-5 18:47:06

这是一个线程同步问题

guanxihui 发表于 2011-12-6 15:55:30

回复【2楼】tiancaigao7天才杨威利
如果你的自动运行的线程优先级最高,那么肯定还会继续运行,因为挂起的任务还是处于就绪状态。如果你想要这样切换,不如使用信号量或者事件来强制切换,自动运行的线程检测到按键之后创建手动运行的线程,并且运行,之后等待一个信号量或者对应的事件,而这个信号量或者事件是在按键中断里面发送的。通过按键中断记录案件的次数,然后根据不同的次数发送不同编码的事件。然后不同的任务接受这个事件来运行。
-----------------------------------------------------------------------
这是个好主意,谢谢你的帮忙
页: [1]
查看完整版本: 关于RT-Thread线程挂起后还会运行的一个问题