RT_Thread线程重复创建分析

本文介绍了在RT_Thread中如何管理和控制线程,以防止内存过度消耗和系统不稳定。通过检查线程是否活跃并手动关闭,确保了线程安全结束,同时强调了避免使用rt_thread_delete和重复启动线程的重要性。
摘要由CSDN通过智能技术生成

在RT_Thread中可以使用语句rt_thread_create()来创建一个线程,经过测试如果上一个创建的线程还没结束再次创建启动便会再次创建一个同样的线程,过多的创建会占用过多内存甚至导致系统不稳定,因此如果线程只需要同时运行单个,在每次创建时候关闭上次线程是必要的。

void find_zeropoint1_entry(void *param){
    pos_t lim;
    int speed1_n;
    find_zeropoint_flag = 1;
    speed1_n = speed1;
    speed1 = 12;
    lim.a = -120000;
    lim.b = encoder2_num();
    go_to_position(&lim);
    while(1){
        rt_thread_mdelay(500);
        if(!rt_pin_read(motor1_dir)||find_zeropoint1_thread_running){
            break;
        }
    }
    set_zero1();
    speed1 = speed1_n;
    find_zeropoint_flag = 0;
    find_zeropoint1_thread_running = RT_FALSE;
    find_zeropoint1_thread = RT_NULL;
}

void find_zeropoint1(void){

    if (find_zeropoint1_thread != RT_NULL) {
        find_zeropoint1_thread_running = RT_TRUE;
    }
    else{
        find_zeropoint1_thread = rt_thread_create("find_zero_point1", find_zeropoint1_entry, RT_NULL, 512, 10, 5);
        rt_thread_startup(find_zeropoint1_thread);
    }
}

这是一个回零点的例程,如果在同一时间内运行多个会导致电机运行混乱。因此在每次调用的时候判断线程是否为空再启动。不为空则通过全局变量通知线程结束,线程结束时把改全局变量关闭并且把线程设置NULL,经测试线程结束之后并不会自动将它设置为null一定要手动设置。这样可以安全的结束线程。

不建议使用rt_thread_delete()函数,强行结束线程有时会导致崩溃。

如果线程被创建后重复启动也会导致崩溃,每次启动前一定要判断。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值