关于线程挂起的实现方法的疑问

发表在 Kernel2019-10-11 21:25 [复制链接] 1 47

本帖最后由 春和景明 于 2019-10-11 21:28 编辑
- Y' y0 K# F( G4 |; ^, i5 d$ Q. j8 Q, u+ ^" Y  m
今天刚用用挂起功能(之前没用过),发现无法实现3 U0 f, j4 ]) o* S% ~
' x% T$ m( n4 R) h
static void thread1_entry(void* parameter)2 C8 W( Q# d7 n. N9 d# `/ {" \3 H
{8 ?) N& m* k- C) @* I0 k& X5 A
rt_uint32_t count = 0;
- n: W* `" s4 W9 D0 n# uwhile (1)
9 ~; p/ y/ N4 I- u/ }1 b1 I7 n{# V' w. q1 S$ E1 R. o  K2 k9 c3 x
0 r: n/ M5 e9 n
   rt_kprintf("out some msg。。。");  v% z  ]; x3 J3 u; j5 e/ n
   rt_thread_mdelay(1000);; n( H" J& c7 z: f% K: F9 j; F& V2 I+ Z
}8 A. ?  U( G" t5 B2 ~
}/ N: |3 C! b4 M; ^+ T# S
8 }$ ?4 v) D# S7 s7 r) X
! N( i7 b; _8 U, F8 d9 i
static void thread2_entry(void* parameter)* i* Z# o# u# g& E; l
{
" r' B  X9 S' h7 q* f: ]' C% h  按键线程
; j$ W0 }' B) @9 }' I3 l5 F& ]  按键按下 依次 挂起 恢复 挂起 恢复。。。. C- C) L" Q+ z# S
}& U- i2 L- y3 X5 W% D  k( H
3 Z+ A8 u. ?- `8 a8 w
) N/ Q2 E) E) l/ {
看帖子,有大神说有 rt_thread_mdelay无法挂起,如果当前是线程的状态是挂起状态,就无法使用rt_thread_suspend挂起该线程。应该IPC之类的实现。
( W2 g$ R  |" J* {) l. c1 N4 n) W# X7 ^& c, |
要改成这样吗
; P+ @: b& d# h- t( V5 v/ Pstatic void thread1_entry(void* parameter)$ X( J4 x7 ]1 n$ A
{
( k8 P: }4 z9 X- h; S& c4 Prt_uint32_t count = 0;2 h2 J8 R3 P' B  [. g/ P
while (1)- w( T4 I, S0 y+ E% X
{
6 K/ r1 |; V1 n/ n. h* `; a. d   rt_mutex_take(ComMutex, RT_WAITING_FOREVER);
( ~, p6 ]3 w  Y0 D/ L' X- p   rt_kprintf("out some msg。。。");& w. S* b; v/ N! c2 z1 T+ W
  rt_mutex_release(ComMutex);) Z4 G0 A( I: Z- }# w& z& u+ v
   rt_thread_mdelay(1000);0 h  ^' _1 h. M/ ]: d+ A) x* D) s
}9 ]' w$ n% L, g8 g7 a( f- y6 A
% B8 o5 i5 {  B2 H
static void thread2_entry(void* parameter)0 T6 N) K' x9 p
{+ I4 T4 K3 A) r3 B
  按键线程 ! f8 t; J- ^9 Q& p7 P  Y7 n* i' E
  按键按下 一次 take  release。。。吗, j: j# m# Q8 e. `
}3 v. A; {1 f# x5 E9 l

# k5 G, R/ I5 ~6 P  L; l" G
5 C' a8 i/ f( q! B  j那么开机想让thread1_entry保持沉默,第一个rt_mutex_take放在哪里合适?
0 x, F( r& R1 }2 C. o另外rt_mutex_take和rt_mutex_release是不是必须在一个线程内成对调用,比如main函数take了别的线程无法release。3 z5 G$ g7 D+ H- R5 b( Z( [% f

1 b7 k! L0 Z  h! w  D  p7 @. ]% l4 [2 c) E
2 g/ K& {) D2 a* w
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-10-11 21:30:31 | 显示全部楼层
刚试验了次 在初始化thread2_entry线程的函数中中创建互斥量 并在该线程开始的部分(while(1)之前) take,然后检测按键,依次take  release 能实现thread1_entry线程的挂起
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

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