线程创建后,没看到删除操作,但是看不到了

发布于 2021-02-01 16:57:31

在研究ART-Pi中的“art-pi-factory”的例子代码发现一个问题,"web_init"这个线程是在wifi连网之前就启动后,负责监测wifi连网状态,list_thread命令显示线程如下:
image.png

static void web_init_thread(void *param)
{
    while (!rt_wlan_is_ready())
    {
        rt_thread_mdelay(500);
    }
    webnet_init();
}

int web_init(void)
{
    rt_thread_t tid = rt_thread_create("web_init", web_init_thread, NULL, 512, 15, 5);
    if (tid)
    {
        rt_thread_startup(tid);
        return 0;
    }
    else
    {
        LOG_E("web init thread create failed");
        return -1;
    }
}

若wifi连网成功,则启动“webnet_init();”,这个函数会启动一个“webnet”的线程,现在问题来了,在“webnet_init()”函数中没有看到任何删除线程的代码,"web_init"这个线程看不到了,通过list_thread命令可以查看。
image.png

int webnet_init(void)
{
    rt_thread_t tid;

    if (init_ok == RT_TRUE)
    {
        LOG_I("RT-Thread webnet package is already initialized.");
        return 0;
    }

    tid = rt_thread_create(WEBNET_THREAD_NAME,
                           webnet_thread, RT_NULL,
                           WEBNET_THREAD_STACKSIZE, WEBNET_PRIORITY, 5);

    if (tid != RT_NULL)
    {
        rt_thread_startup(tid);
        init_ok = RT_TRUE;
        LOG_I("RT-Thread webnet package (V%s) initialize success.", WEBNET_VERSION);
    }
    else
    {
        LOG_E("RT-Thread webnet package (V%s) initialize failed.", WEBNET_VERSION);
        return -1;
    }

    return 0;
}

查看更多

关注者
0
被浏览
220
小小李sunny
小小李sunny 2021-02-01

线程要无线循环运行,也就是线程的代码在while(1)中运行,否则执行一次就结束了,线程也就自动被删除了。
注意while(1)中要有delay,让线程空闲的时候让出资源,否则其他线程将无法运行。

2 个回答
张世争
张世争 2021-02-01

web_init return 了,所以没有了(系统会回收删除)

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览