首页 > 其他分享 >07C回调函数

07C回调函数

时间:2024-06-07 23:32:12浏览次数:27  
标签:函数 void eventName callback 07C 函数指针 回调

C零碎语法

目录

文章目录

流程

请添加图片描述

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.异步回调函数

请添加图片描述

标签:函数,void,eventName,callback,07C,函数指针,回调
From: https://blog.csdn.net/2302_79752447/article/details/139391988

相关文章

  • c++的面对对象 的 虚函数
    #include<iostream>#include<string>classAnimal{public:virtualvoidmakeSound()=0;//纯虚函数,所有的动物都应该提供自己的叫声};classDog:publicAnimal{public:voidmakeSound()override{std::cout<<"Woof!"<&l......
  • 神经网络-激活函数
    深度学习中的激活函数与神经网络初始化在深度学习中,激活函数和网络的初始化对于模型的性能和收敛性至关重要。本文将探讨不同类型的激活函数,并展示如何使用PyTorch进行神经网络参数的初始化。激活函数对比激活函数是神经网络中的关键组成部分,它们在神经元之间引入非线性,使得......
  • 基于函数计算部署GPT-Sovits语音生成模型实现AI克隆声音
    GPT-Sovits是一个热门的文本生成语音的大模型,只需要少量样本的声音数据源,就可以实现高度相似的仿真效果。通过函数计算部署GPT-Sovits模型,您无需关心GPU服务器维护和环境配置,即可快速部署和体验模型,同时,可以充分利用函数计算按量付费,弹性伸缩等优势,高效地为用户提供基于GPT-Sovits......
  • C语言基础——函数
             ʕ•ᴥ•ʔ       づ♡ど ......
  • 【YOLOv8改进】YOLOv8 更换损失函数之 SIoU EIoU WIoU _ Focal_*IoU CIoU DIoU ShapeI
    YOLO目标检测创新改进与实战案例专栏专栏目录:YOLO有效改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例专栏链接:YOLO基础解析+创新改进+实战案例GIoU文章链接论文地址:论文地址代码地址:代码地址基本原理广义Io......
  • 【YOLOv8改进】SlideLoss损失函数,解决样本不平衡问题
    YOLO目标检测创新改进与实战案例专栏专栏目录:YOLO有效改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例专栏链接:YOLO基础解析+创新改进+实战案例介绍摘要近年来,基于深度学习的人脸检测算法取得了很大进展。这些......
  • 函数返回的是非类型而不是列表
    我正在使用opencv制作人脸检测器,我制作了两个检测器,分别检测两个正面的哈拉卡斯卡特。然后,我编写了一段代码,只有当两个检测器检测到同一区域时,才会显示矩形。这样做效果很好,但当我把同样的代码放到函数中时,它就会返回非类型。如果我将矩形绘制放在函数内,它就会工作,但放在函数外......
  • scanf(),gets(),puts(),fgets()函数的使用
     scanf()scanf按%d输入数字或%s输入字符串时,忽略空格、回车或制表符等空白字符(被作为数据的分隔符) intmain(){ inta=0; intb=0; charc[12]; scanf("%s",&c); printf("c=%s",c); return0;}空格后面的world没有被读进去加一句scanf语句,world被读走了in......
  • 【JS封装-数组操作】强化编程实践:精选JavaScript函数封装集锦-关于数组操作(数组去重、
    目录数组去重数组快速排序过滤数组映射数组数组扁平化数组求和数组最大值数组最小值数组切片数组乱序(洗牌算法)数组去重/***去除数组中的重复项。*@param{Array}array要去重的数组。*@returns{Array}去重后的数组。*/functionuniqueArray(array......
  • c++“二纯” 纯虚函数和纯虚析构
    首先给出这样一段概念:在C++中,当基类包含纯虚函数时,这些纯虚函数在基类中不需要(也不能)有定义。但是,如果基类有一个纯虚析构函数(即析构函数被声明为纯虚函数),那么情况就有些特殊了。纯虚析构函数需要在基类中有声明,但通常也需要在类外提供一个定义(尽管这个定义通常只包含析构函数......