reynold520 发表于 2010-7-8 22:46:50

RT thread 线程初始化疑问?

void player_init()
{
    rt_err_t result;

        /* create player thread */
        player_thread_mq = rt_mq_create("player", sizeof(struct player_request),
                8, RT_IPC_FLAG_FIFO);
        RT_ASSERT(player_thread_mq != RT_NULL);

        result = rt_thread_init(&player_thread_tid, "ply_bg", player_thread, RT_NULL,
                player_thread_stack, sizeof(player_thread_stack),
                20, 5);   //这部分是线程初始化,可是怎么没看见这个线程在哪里创建的啊?

        if (result != RT_EOK) rt_kprintf("player thread init failed\n");
        else
        {
                rt_thread_startup(&player_thread_tid);
                player_ui_init();//在此函数里面有创建了一个player_entry 的线程,但是这个线程也不是一个循环,好像只是GUI 的显示?
        }
}

问题:为什么有些函数没有见到创建就直接初始化了(比方说这个player_thread )? 而有些线程有创建却又没见初始化呢(比方说这个 key_thread_entry)?还有些创建了,入口函数里面却又不是死循环,是代表这个线程创建后只执行一次吗(比方说 player_entry 这个)?

问题比较多,可能也比较浅,希望不要介意哈!

gzhuli 发表于 2010-7-9 02:28:23

没读手册?静态线程和动态线程……
rtgui_workbench_event_loop()这个函数里面是个GUI事件处理循环(函数名就有loop,对吧),调用后就不返回了。

reynold520 发表于 2010-7-9 08:15:10

恩,看下了,确实,好像所有的没有循环的那些线程都调用这个函数进去处理了。

还有不明白的是rt_thread_init 的线程是在初始化的同时直接就创建了吗?

看代码里 rt_thread_init 的线程都是带参数的,而 rt_thread_create 的都参数都是RT_NULL ,

这两种有撒区别呢?

谢谢!

reynold520 发表于 2010-7-9 08:22:00

rt_thread_init 创建的是静态线程

rt_thread_create 创建的是动态线程

但是好像在编程指南中还是没看到关于这两种线程之间的区别,帮忙指导下。


谢谢!

zllfdd 发表于 2010-7-9 09:14:05

看看 rt_thread_init()和rt_thread_create()的实现,了解下各参数的意思就明白了。
它们两个是平等的功能,并不是有什么依赖关系。

ffxz 发表于 2010-7-9 09:29:57

rt_thread_create会动态分配线程TCB和栈。

rt_thread_init则是由用户指定线程TCB和栈,然后对它们做初始化。

动态线程,在它运行结束后,系统会自动释放分配的线程TCB和栈内存空间。

reynold520 发表于 2010-7-9 12:48:41

这样的话一般什么样的线程需要设置成动态线程 什么类型的线程要分配为静态线程呢?

aozima 发表于 2010-7-9 12:59:45

回复【6楼】reynold520
这样的话一般什么样的线程需要设置成动态线程 什么类型的线程要分配为静态线程呢?
-----------------------------------------------------------------------
以RADIO为例, KEY这些是必须的,不可能会被移除的线程使用静态的.静态线程的栈和TCB都是在编译时分配好的.是确定的.
而红外学习和电台更新这两个线程,只有要需要时才被动态创建.线程退出后,自动释放资源.但有可能因为资源不足而创建失败.

shaolin 发表于 2010-7-9 13:04:54

可以参考这个帖子
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3975841&bbs_page_no=2&bbs_id=3066

reynold520 发表于 2010-7-9 20:00:02

谢谢楼上各位,大概明白是怎么样的了。。。

继续学习中,有问题在请教了!

reynold520 发表于 2010-7-9 21:31:20

在 player_thread 这个线程里面的switch 语句没有default ,是特意这样设计的还是一个疏忽呢? 如果 request.type 的值不是PLAYER_REQUEST_PLAY_SINGLE_FILE,那语句会执行到哪里去了? 好像没地方跑了。
页: [1]
查看完整版本: RT thread 线程初始化疑问?