1. 程式人生 > 實用技巧 >RT-Thread程式碼_執行緒建立

RT-Thread程式碼_執行緒建立

功能:

  1. 建立兩個執行緒,一個動態執行緒和一個靜態執行緒;
  2. 一個執行緒執行完畢後自動被系統刪除;另一個執行緒一直列印計數。
#include <rtthread.h>

/*
建立兩個執行緒,一個動態執行緒,一個靜態執行緒;
一個執行緒執行完畢自動被系統刪除,另一個執行緒一直列印計數
*/

static rt_thread_t tid1 = RT_NULL;

#define THREAD_PRIORITY            25
#define THREAD_STACK_SIZE        512
#define THREAD_TIMESLICE        5

/*
執行緒1的入口函式 */ static void thread1_entry(void * param) { rt_uint32_t count = 0; while(1) { /* 執行緒1採用低優先順序執行,一直列印計數值 */ rt_kprintf("thread1 count:%d\r\n",count++); rt_thread_mdelay(500); } } ALIGN(RT_ALIGN_SIZE) static char thread2_stack[512]={0}; static struct rt_thread thread2;
/* 執行緒2的入口函式 */ static void thread2_entry(void *param) { rt_uint32_t count = 0; /* 執行緒2擁有較高優先順序,以搶佔執行緒1而獲得執行 */ for(count = 0;count <10;count++) { rt_kprintf("thread2 count2 :%d\r\n",count); rt_thread_mdelay(500); } /* 執行緒2執行結束後將自動被系統刪除;執行緒控制塊和執行緒棧在idle執行緒中釋放
*/ rt_kprintf("thread2 exit\r\n"); } /* 執行緒示例初始化函式 */ int test_thread_sample(void) { /* 建立執行緒1,名稱是thread1,執行緒入口函式是thread1_entry */ tid1 = rt_thread_create("thread1", thread1_entry, RT_NULL, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE); /* 如果獲得執行緒控制塊,啟動這個執行緒 */ if(tid1 != RT_NULL) { rt_thread_startup(tid1); } /* 初始化執行緒2,名稱是thread2,執行緒入口函式是thread2_entry */ rt_thread_init( &thread2, "thread2", thread2_entry, RT_NULL, &thread2_stack[0], sizeof(thread2_stack), THREAD_PRIORITY-1, THREAD_TIMESLICE); rt_thread_startup(&thread2); return 0; } /* 匯入 msh 命令列表中 */ MSH_CMD_EXPORT(test_thread_sample,test01 thread sample);

執行結果: