rtThread调度器钩子使用

简介: rtThread调度器钩子使用

在线程进行调度切换时,会执行调度,我们可以设置一个调度器钩子,这样可以在线程切换时,做一些额外的事情,这个例子是在调度器钩子函数中打印线程间的切换信息,如下代码:

#include <rtthread.h>
#define THREAD_STACK_SIZE   1024
#define THREAD_PRIORITY     20
#define THREAD_TIMESLICE    10
/* 针对每个线程的计数器 */
volatile rt_uint32_t count[2];
/* 线程 1、2 共用一个入口,但入口参数不同 */
static void thread_entry(void* parameter)
{
    rt_uint32_t value;
    value = (rt_uint32_t)parameter;
    while (1)
    {
        rt_kprintf("thread %d is running\n", value);
        rt_thread_mdelay(1000); // 延时一段时间
    }
}
static rt_thread_t tid1 = RT_NULL;
static rt_thread_t tid2 = RT_NULL;
static void hook_of_scheduler(struct rt_thread* from, struct rt_thread* to)
{
    rt_kprintf("from: %s -->  to: %s \n", from->name , to->name);
}
int scheduler_hook(void)
{
    /* 设置调度器钩子 */
    rt_scheduler_sethook(hook_of_scheduler);
    /* 创建线程 1 */
    tid1 = rt_thread_create("thread1",
                            thread_entry, (void*)1,
                            THREAD_STACK_SIZE,
                            THREAD_PRIORITY, THREAD_TIMESLICE);
    if (tid1 != RT_NULL)
        rt_thread_startup(tid1);
    /* 创建线程 2 */
    tid2 = rt_thread_create("thread2",
                            thread_entry, (void*)2,
                            THREAD_STACK_SIZE,
                            THREAD_PRIORITY,THREAD_TIMESLICE - 5);
    if (tid2 != RT_NULL)
        rt_thread_startup(tid2);
    return 0;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(scheduler_hook, scheduler_hook sample);

执行效果可以看到我这边一直有个一监听的线程在后台

相关文章
|
11月前
|
前端开发 JavaScript
React 表单处理技巧
【10月更文挑战第24天】本文从初学者角度出发,详细介绍了 React 中表单处理的基本概念、常见问题及解决方案。涵盖受控组件与非受控组件的区别、状态更新、表单验证、多字段管理及高级技巧,通过代码示例帮助读者更好地理解和应用。
270 7
|
12月前
|
安全 前端开发 测试技术
【灵码助力安全2】——利用通义灵码辅助复现未公开漏洞的实践
本文介绍了利用通义灵码辅助复现未公开漏洞的过程,包括XSS和文件包含两种典型漏洞类型。通过具体案例,展示了如何结合CVE描述和源码,使用灵码定位漏洞位置、分析漏洞原因,并验证漏洞的存在。文章强调了灵码在提高漏洞复现效率、减少手动排查时间方面的优势,同时也指出了其在复杂场景下仍需人工判断的局限性。未来,期待灵码能在自动化安全测试、动态分析及威胁建模等领域发挥更大作用,全面提升软件安全性。
|
12月前
ModBus Pull的详细安装教程
ModBus Pull的详细安装教程
511 1
|
Ubuntu
Ubuntu修改设备名称
本文介绍了如何在Ubuntu系统中通过修改`/etc/hostname`和`/etc/hosts`文件来更改设备名称,并提到了重启设备以应用更改。
218 0
Ubuntu修改设备名称
|
12月前
|
SQL 人工智能 关系型数据库
我在IDEA编辑器中使用通义灵码
体验了通义千问后,我开始使用智能编码助手通义灵码,它让代码开发更加高效便捷。通过具体的应用场景,如项目私有化改造,利用通义灵码生成PO类和SQL脚本,大幅提升了开发效率。正确的使用姿势包括提供提示词和多次尝试,能够更好地发挥通义灵码的智能辅助功能。
589 2
|
Web App开发 测试技术 网络安全
Kali 测试:使用Burp Suite 对网络认证服务的攻击(一)
Kali 渗透测试:使用Burp Suite 对网络认证服务的攻击(一)
373 0
|
缓存 监控 前端开发
【Flutter前端技术开发专栏】Flutter应用的性能调优与测试
【4月更文挑战第30天】本文探讨了Flutter应用的性能调优策略和测试方法。性能调优对提升用户体验、降低能耗和增强稳定性至关重要。优化布局(避免复杂嵌套,使用`const`构造函数)、管理内存、优化动画、实现懒加载和按需加载,以及利用Flutter的性能工具(如DevTools)都是有效的调优手段。性能测试包括基准测试、性能分析、压力测试和电池效率测试。文中还以ListView为例,展示了如何实践这些优化技巧。持续的性能调优是提升Flutter应用质量的关键。
346 0
【Flutter前端技术开发专栏】Flutter应用的性能调优与测试
【STM32】通过RTThread驱动W25QXXX
【STM32】通过RTThread驱动W25QXXX
486 0
|
人工智能 搜索推荐 物联网
如何用AI大模型升级升级产品
众所周知,从去年到今年,AI领域出现井喷版的火热景象,越来越多的基于AI大模型诞生的应用越来越多,功能也越来越强大。就拿传统的搜索引擎企业来讲,也不得不迅速加入到AI大模型开发的队伍中,以求提升自身搜索产品的功能升级。无论是国内还是国外,被chatGPT直接影响到的行业都在打造自己的AI大模型,为的就是跟上技术发展的脚步,使得自身产品能够保持持续的竞争力。
674 1
如何用AI大模型升级升级产品
|
数据安全/隐私保护
销售要离职,客户资源怎么办?
前言:销售工作由于工作环境、业绩压力等问题,导致人员流动率偏高,尤其是讲生活品质的年轻一代面前,动不动就离职的人大有人在。而人员流动意味着客户资源管理的不稳定。一旦碰上销售业务员离职带走客户资源,企业就有苦难言了!所以,企业管理层都会关注到:销售业务员离职带走客户资源怎么办?
2326 125