07C回调函数

C零碎语法

目录

文章目录

  • C零碎语法
  • 流程
    • 1.声明一个函数指针
    • 2.定义回调函数
    • 3.注册回调函数
  • 应用
    • 4.事件回调
    • 5.同步回调函数
    • 6.异步回调函数

流程

请添加图片描述

1.声明一个函数指针

uint8_t (*p_CallbackFunc)(void);

2.定义回调函数

重要的是要注意回调函数只是一个函数。 由于它的使用方式(通过函数指针访问),我们将其称为回调。

uint8_t Handler_Event(void) 
{
/* code of the function */
}

3.注册回调函数

这是为函数指针分配地址的操作。

static CallbackFunc_t HandlerCompleted;/*用来注册回调函数的功能函数*/
void CallbackRegister (CallbackFunc_t callback_func) 
{HandlerCompleted = callback_func;
}/* 注册Handler_Event作为回调*/
CallbackRegister(Handler_Event);

应用

4.事件回调

#include <stdio.h>// 定义回调函数类型
typedef void (*EventCallback)(const char*);// 事件处理结构体
typedef struct {EventCallback callback; // 回调函数指针const char* eventName;  // 事件名称
} EventHandler;// 注册回调函数
void registerCallback(EventHandler* handler, EventCallback callback, const char* eventName) {handler->callback = callback;handler->eventName = eventName;
}// 模拟事件触发
void triggerEvent(EventHandler* handler) {printf("Event '%s' has been triggered!\n", handler->eventName);handler->callback(handler->eventName);
}// 回调函数示例
void onEvent(const char* eventName) {printf("Callback function is called for event: %s\n", eventName);
}int main() {// 创建事件处理器实例EventHandler eventHandler;// 注册回调函数到事件处理器registerCallback(&eventHandler, onEvent, "SampleEvent");// 触发事件triggerEvent(&eventHandler);return 0;
}
  • 我们定义了一个EventCallback类型,它是一个函数指针类型,指向一个接受const char*参数并返回void的函数。
  • EventHandler结构体包含一个回调函数指针callback和一个指向事件名称的指针eventName
  • registerCallback函数用于注册一个回调函数到EventHandler结构体中。
  • triggerEvent函数模拟了一个事件的触发,它打印一条消息并调用注册的回调函数。
  • onEvent是一个回调函数示例,它简单地打印出事件名称。
  • main函数中,我们创建了一个EventHandler实例,注册了onEvent作为回调函数,并触发了事件。

当运行这个程序时,它将输出:

Event 'SampleEvent' has been triggered!
Callback function is called for event: SampleEvent

请添加图片描述

5.同步回调函数

请添加图片描述

6.异步回调函数

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetCode.90. 子集 II

leetCode.90. 子集 II 题目思路 代码 class Solution { public:vector<vector<int>> res;vector<int> path;vector<vector<int>> subsetsWithDup(vector<int>& nums) {// 先排序&#xff0c;让有相同元素的都放到一起sort(nums.begi…

msconfig修改引导导致电脑无法进入系统 和 启动蓝屏问题

目录 解决方法遇到的问题开机蓝屏进入【指定UFEI固件设置】进入bios启动系统选择界面&#xff08;忘了拍照&#xff09; 解决方法 找到一个移动U盘&#xff08;最好大于10G&#xff09;格式化&#xff1b;找一个好的电脑安装WEPE软件&#xff08;wepe安装链接&#xff09;&…

链表算法题(OJ刷题超详细讲解)

1.返回倒数第K个节点&#xff0c; OJ链接&#xff1a;返回倒数第K个节点 本题有很多种解法&#xff0c;例如创建数组&#xff0c;或者将原链表反转等等&#xff0c;这里们使用快慢指针&#xff0c;只需要遍历一遍链表&#xff0c;并且空间复杂度为O(1)&#xff0c;时间复杂度为…

选择困难!?伦敦金etf谁胜一筹?

虽然伦敦金和黄金ETF都是黄金的投资方式&#xff0c;但它们有着许多不一样的地方。伦敦金市场是全球最大的黄金市场之一&#xff0c;每天的交易量巨大&#xff0c;没有任何财团或机构能够人为操控它&#xff0c;而且整个市场24小时公开地运行&#xff0c;投资者可以灵活把握市场…

HCIP-RS实验-OSPF单区域配置

目录 简介&#xff1a;建立新拓扑配置IP验证IP连通性配置单区域的OSPF查看网络连通性查看路由器运行的基本OSPF信息查看路由器的OSPF邻居关系建立情况查看路由器的OSPF数据库信息。 观察路由器在以太网上邻接关系的建立过程 简介&#xff1a; OSPF&#xff08;Open Shortest P…

在C#中使用 NLog 库进行日志记录

NLog 是 .NET 的日志记录框架。具有丰富的日志路由和管理能力&#xff0c;极大地帮助您生成和管理日志。NLog 是一个库&#xff0c;可以轻松地同时记录和管理多个不同区域&#xff08;例如控制台、数据库或文本文件&#xff09;中的数据。我们可以按如下方式列出 NLog 的功能&a…

实战攻防:蜜罐无关,溯源有术

前言 突然接到通知&#xff0c;甲方在HVV防守前突然收到内网IP地址出现Socks代理通信&#xff0c;审计流量发现确实属于socks流量&#xff0c;不属于告警流量&#xff0c;告警地址为个人终端&#xff0c;直接准入工具阻断等待排查。 态感告警 流量分析属于正常的socks流量。 …

职场思考-职场第三年规划重点(14)

&#xff08;职场第三年规划重点(上)&#xff09; 确定方向&#xff0c;拉进关系&#xff0c;提高思维 好的职业生涯规划必须具备以下三个特点&#xff1a; 合理性&#xff08;以当事人的天赋、性格和现有知识与技能为基础&#xff0c;是适合并为当事人所接受的&#xff09;、可…

word-简历排版

1、确认字体&#xff08;微软雅黑&#xff09;、字号&#xff08;五号/小五&#xff09; 2、设置段间距和行间距、页边距 3、突出各模块标题&#xff0c;增加分格线 4、使用制表位进行对齐&#xff1a;视图-标尺&#xff0c;制表符&#xff08;tab&#xff09;和制表位共同使…

西贝柳斯终极版2023:Mac上的简易音乐记谱神器,谱写未来

Avid Sibelius Ultimate 2023 for Mac是一款专为Mac用户设计的音乐记谱软件&#xff0c;它以其强大的功能和直观的操作界面&#xff0c;为音乐创作者们提供了一个高效、便捷的创作平台。 一、音乐创作的得力助手 Sibelius Ultimate 2023不仅适用于有抱负的作曲家和词曲作者&a…

计算机网络学习记录 网络层 Day4(上)

计算机网络学习记录 网络层 Day4 &#xff08;上&#xff09; 你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github https://github.com/Qiuner gitee https://gitee.com/Qiuner 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f60…

122. 买卖股票的最佳时机 II(中等)

122. 买卖股票的最佳时机 II 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;122. 买卖股票的最佳时机 II 2.详细题解 实现最大的利润&#xff0c;即只要有盈利就收入囊中&#xff0c;由于交易没有具体限制次数&#xff0c;因此可以依…

再论Web应用在医学研究中构建数据收集问卷(stremlit_survey包体验)

再论Web应用在医学研究中构建数据收集问卷&#xff08;Streamlit_survey包体验&#xff09; 概述 医学队列研究是临床研究的重要形式&#xff0c;这种研究通过收集临床诊疗过程中产生的数据而阐述疾病相关的因素。在临床数据收集过程中&#xff0c;Web APP体现出了一定的优势…

计算机毕业设计 | SpringBoot图书管理系统(附源码)

1&#xff0c; 概述 1.1 课题背景 开发一个学生成绩管理系统&#xff0c;采用计算机对学生成绩进行处理&#xff0c;进一步提高了办学效益和现代化水平。为广大教师和学生提高工作效率&#xff0c;实现学生成绩信息管理工作流程的系统化、规范化和自动化。现在我国中学的学生…

YOLOv8_obb训练流程-原理解析[旋转目标检测理论篇]

在旋转目标检测网络中,换了个顺序,先把训练流程捋一遍,然后再取捋一下测试的流程。由下图的YOLOv8l_obb网络结构图可以看到相对于目标检测网络,旋转目标检测网络只是在Head层不相同,在每个尺度特征层中增加了Angle分支(浅蓝色),通过两个卷积组和一个Conv卷积得到得到通…

jupyter之plt 画图弹出窗口展示图片以及静态图片切换方法

1. jupyter出图的三种方式 在python的Jupyter Notebook中&#xff0c;使用matplotlib绘制动态图形时&#xff0c;可能出现只显示一张静态图像。 这是因为在notebook中使用plt绘图共有三种模式&#xff1a; %matplotlib inline&#xff1a;这是默认的模式&#xff0c;输出的图片…

C语言Prim算法和Prim-Alternat找最小生成树

文章目录 1、用prim算法求最小生成树C语言Prim算法实现 2、用Prim-Alternate算法求最小生成树3、C语言Prim-Alternate算法实现 1、用prim算法求最小生成树 绿色线会标记选过的边 从v1当作起始点开始&#xff0c;可选择: (v1,v2)权值为6 &#xff08;v1,v3&#xff09;权值为3 &…

经济学SSCI期刊,中科院1区,领域内顶刊,影响力高

一、期刊名称 World Development 二、期刊简介概况 期刊类型&#xff1a;SSCI 学科领域&#xff1a;经济学 影响因子&#xff1a;6.9 中科院分区&#xff1a;1区 三、期刊征稿范围 《世界发展》是一本多学科的发展研究月刊。它力求探讨如何改善生活水平和一般人类状况&am…

AIGC绘画基础——Midjourney关键词大全+万能公式

距发布MJ初级注册入门教程已有时日&#xff0c;很多粉丝表示很有用&#xff0c;但关键词有很多人不知如何组合使用&#xff0c;那今天再给大家更新一期&#xff0c;主要是教大家如何用关键词、把控关键词描述&#xff0c;除此之外在文末更新了一大堆关键词给大家使用~ 一、Midj…

合并两个有序链表和合并 K 个升序链表

21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 […