/*静态线程的创建启动删除的注意点*/
在创建静态线程时,要注意分配线程控制块大小,以及线程结构体 threadx_statck[XX],
static char threadx_statck[xx];
static struct rt_thread threadx;
静态线程的创建需要使用rt_thread_init()函数
rt_thread_init()的函数返回的数据类型为rt_err_t
rt_err_t result;
result = rt_thread_init("&线程结构体的地址", one
"名称" two
"线程入口函数", three
"RT_NULL", four
"&线程控制块首地址", five
"线程控制块大小 sizeof()", six
"优先级", seven
"时间片大小" eight
);
if(result == RT_EOK)
{
rt_thread_startup(&threadx);
}
线程删除使用 rt_rhread_detach(&xxx);
/*动态线程的创建启动删除的注意点*/
在创建动态线程时,只需要申请一个rt_thread_t的指针,指针指为RT_NULL
static rt_thread_t tidx = RT_NULL;
动态线程的创建使用rt_thread_creat()即可,函数返回的指针使用指针tid就可以
tidx = rt_thread_creat("名称", one
"线程入口函数", two
"RT_NULL", three
"线程控制块大小 512", four
"优先级", five
"时间片大小" six
);
if(tidx != RT_NULL)
{
rt_thread_startup(tidx);
}
动态线程的删除使用 rt_thread_delete(tidx);
/*入口函数的写法*/
函数入口部分,需要添加void *parameter <该处为指针即可>
static threadx_entry(void *parameter)
{
XXXXX
}
如果不添加将会报参数的警告
增加:线程创建中参数RT_NULL的意义,入口函数threadx_entry(void *parameter)参数的使用。
#include
#define THREAD_STACK_SIZE 1024
#define THREAD_PRIORITY 20
#define THREAD_TIMESLICE 10
/* 线程入口 */
static void thread_entry(void* parameter)
{
rt_uint32_t value;
rt_uint32_t count = 0;
value = (rt_uint32_t)parameter;
while (1)
{
if(0 == (count % 5))
{
rt_kprintf("thread %d is running ,thread %d count = %d\n", value ,value ,count);
if(count > 200)
return;
}
count++;
}
}
int timeslice_sample(void)
{
rt_thread_t tid;
/* 创建线程1 */
tid = rt_thread_create("thread1",
thread_entry, (void*)1,
THREAD_STACK_SIZE,
THREAD_PRIORITY, THREAD_TIMESLICE);
if (tid != RT_NULL)
rt_thread_startup(tid);
/* 创建线程2 */
tid = rt_thread_create("thread2",
thread_entry, (void*)2,
THREAD_STACK_SIZE,
THREAD_PRIORITY, THREAD_TIMESLICE-5);
if (tid != RT_NULL)
rt_thread_startup(tid);
return 0;
}
通过这种方式,可以通过利用入口参数的不同来实现不同的功能。