diff --git a/rt-thread-version/rt-thread-standard/programming-manual/basic/basic.md b/rt-thread-version/rt-thread-standard/programming-manual/basic/basic.md index 8c6d6a141b4be6e341658af694cf573eafe98abb..0091a213448171bf506ff695e476ea2f960e2352 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/basic/basic.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/basic/basic.md @@ -545,6 +545,42 @@ rt_object_is_systemobject() 的输入参数 |----------|------------| | object | 对象的句柄 | +### 如何遍历内核对象 + +以遍历所有线程为例: + +```c +rt_thread_t thread = RT_NULL; +struct rt_list_node *node = RT_NULL; +struct rt_object_information *information = RT_NULL; + +information = rt_object_get_information(RT_Object_Class_Thread); + +rt_list_for_each(node, &(information->object_list)) +{ + thread = (rt_thread_t)rt_list_entry(node, struct rt_object, list); + /* 比如打印所有thread的名字 */ + rt_kprintf("name:%s\n", thread->name); +} +``` + +再以遍历所有互斥量为例: + +```c +rt_mutex_t mutex = RT_NULL; +struct rt_list_node *node = RT_NULL; +struct rt_object_information *information = RT_NULL; + +information = rt_object_get_information(RT_Object_Class_Mutex); + +rt_list_for_each(node, &(information->object_list)) +{ + mutex = (rt_mutex_t)rt_list_entry(node, struct rt_object, list); + /* 比如打印所有mutex的名字 */ + rt_kprintf("name:%s\n", mutex->parent.parent.name); +} +``` + RT-Thread 内核配置示例 ----------------------