线程信息

本文深入探讨了在操作系统中获取线程基本信息的API函数,包括线程自身句柄、空闲线程句柄、堆栈基址、堆栈大小、堆栈使用量等,提供了一个用于枚举系统所有线程并获取详细信息的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

名称:

线程信息



函数名

cyg_thread_self cyg_thread_idle_thread cyg_thread_get_stack_base cyg_thread_get_stack_size cyg_thread_measure_stack_usage cyg_thread_get_next cyg_thread_get_info cyg_thread_get_id cyg_thread_find -  获得基本线程信息

概要

 

 

 

 

说明:

这些函数可用于获取一些关于系统的各个线程的基本信息。通常这些信息在实际应用中很少或没有任何意义,但它们可以在调试过程中非常有用。

cyg_thread_self返回当前线程的句柄。这和当前线程被创建时调用 cyg_thread_create 填写的值相同。这个句柄随后可以传递给其它函数例如 cyg_thread_get_priority 使用。

cyg_thread_idle_thread返回系统空闲线程的句柄。这个线程是由内核自动创建,所以应用程序代码除此之外没有其他方式来获取这些信息。

cyg_thread_get_stack_base cyg_thread_get_stack_size 返回有关特定线程的堆栈信息。返回的值将匹配线程时被创建时传递给 cyg_thread_create 的值。

cyg_thread_measure_stack_usage仅在配置选项 CYGFUN_KERNEL_THREADS_STACK_MEASUREMENT 启用时生效。返回值线程到目前为止使用其堆栈空间的最大字节数。请注意,这不应该被视为一个真正的上限,例如有可能当前测试运行的特定线程没有在函数中调用的最深点中断。不过这个返回值仍然可以给我们一些关于线程堆栈需求度的有用信息。

cyg_thread_get_next用来枚举系统中所有当前线程。该函数应该在 thread id 被设置为 0 的地方进行首次调用。返回的时候 thread id 就会被设置为第一个线程的 thread id ,在随后的调用中,这些参数会被设置为上次调用的返回值。每次系统中下一个进程的句柄和 ID 会被装入,直到返回一个错误值 -- 这意味着线程链表的结束。(这段翻译的好拗口。。。看下面那例子就懂了)

cyg_thread_get_info会根据给出的 thread id 参数所描述的线程的线程信息来填充 cyg_thread_info 结构。返回的信息包括线程的句柄和 ID ,它的状态和名称,优先级和栈参数。如果线程不存在则函数返回 false

<cyg/kernel/kapi.h> cyg_thread_info 结构定义如下,但可能在将来会扩展增加新的成员,所以不要依赖于它的大小:

 

 

 

 

 

cyg_thread_get_id返回一个线程区别于其他线程的唯一线程 ID

cyg_thread_find根据 id 返回一个线程句柄,如果该线程不存在,则返回一个 0 句柄。

(上面俩函数就是一个根据句柄得到id  一个根据 id 得到句柄)

有效上下文

cyg_thread_self只能在一个线程上下文中调用。  cyg_thread_idle_thread 可以在线程或者 DSR 的上下文中进行调,但是必须要在系统初始化以后。 cyg_thread_get_stack_base cyg_thread_get_stack_size cyg_thread_measure_stack_usage 可以在指定的线程被创建后的任何时间被调用,但是衡量堆栈使用情况要涉及至少在部分线程堆栈上的循环,所以该操作应该在线程的上下文中完成。 cyg_thread_get_id 可以在任何上下文中进行调用,只要调用线程能确保所给的线程句柄是有效的。

范例

简单使用cyg_thread_get_next cyg_thread_get_info 的例子如下:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值