线程恢复
线程恢复就是让挂起的线程重新进入就绪状态,如果被恢复线程在所有就绪态线程中,位于最高优先级链表的第一位,那么系统将进行线程上下文的切换。线程恢复使用下面的函数接口:
- rt_err_t rt_thread_resume (rt_thread_t thread);
线程安全
安全
中断例程
可调用
函数参数
- 参数 描述
- thread 要恢复的线程句柄。
函数返回
如果恢复的线程状态并不是RT_THREAD_SUSPEND状态,将返回-RT_ERROR;否则返回RT_EOK。
线程恢复的例子如下代码所示:
- /*
- * 程序清单:唤醒线程
- *
- * 这个例子中将创建两个动态线程(t1和t2),
- * 低优先级线程t1将挂起自身
- * 高优先级线程t2将在一定时刻后唤醒低优先级线程。
- */
- #include <rtthread.h>
- #include "tc_comm.h"
- /* 指向线程控制块的指针 */
- static rt_thread_t tid1 = RT_NULL;
- static rt_thread_t tid2 = RT_NULL;
- /* 线程1入口 */
- static void thread1_entry(void* parameter)
- {
- /* 低优先级线程1开始运行 */
- rt_kprintf("thread1 startup%d\n");
- /* 挂起自身 */
- rt_kprintf("suspend thread self\n");
- rt_thread_suspend(tid1);
- /* 主动执行线程调度 */
- rt_schedule();
- /* 当线程1被唤醒时 */
- rt_kprintf("thread1 resumed\n");
- }
- /* 线程2入口 */
- static void thread2_entry(void* parameter)
- {
- /* 延时10个OS Tick */
- rt_thread_delay(10);
- /* 唤醒线程1 */
- rt_thread_resume(tid1);
- /* 延时10个OS Tick */
- rt_thread_delay(10);
- /* 线程2自动退出 */
- }
- int rt_application_init(void)
- {
- /* 创建线程1 */
- tid1 = rt_thread_create("t1",
- thread1_entry, /* 线程入口是thread1_entry */
- RT_NULL, /* 入口参数是RT_NULL */
- THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);
- if (tid1 != RT_NULL)
- rt_thread_startup(tid1);
- /* 创建线程2 */
- tid2 = rt_thread_create("t2",
- thread2_entry, /* 线程入口是thread2_entry */
- RT_NULL, /* 入口参数是RT_NULL */
- THREAD_STACK_SIZE, THREAD_PRIORITY - 1,
- THREAD_TIMESLICE);
- if (tid2 != RT_NULL)
- rt_thread_startup(tid2);
- return 0;
- }