【IoT】函数回调之 Callback 机制

简介: 回调函数

No0:callback应用场景

虽然经过一段时间对android源码的研究,初步理解如何从app将参数设置到Linux kernel(高通camera部分),但对上层如何获得底层数据困惑不已,最近通过对android frameworks、hal、application层代码的分析,有了初步理解,作简要总结,会在下一篇文章介绍具体实现细节:

上层通过使用callback机制来获得底层数据流-(preview/recording/takePicture)。

No1:何为callback

1) 宽泛解释

通过函数指针调用的函数

定义:

如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

CALLBACK实现的机制

实现机制:

[1]定义一个回调函数;
[2]提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;

[3]当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。

优点:

因为使用此函数可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。简而言之,回调函数就是允许用户把需要调用的函数的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。

2) 具体解释:

定义:

模块A有一个函数fun,它向模块B传递fun的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的fun函数的地址调用fun函数,通知A发生了什么事情,让A作出相应反应,则fun函数称为回调函数,即回调就是一种利用函数指针进行函数调用的过程。

实现机制:

[1] B模块里先定义回调函数类型,、回调函数指针和提供给A模块的接口函数(用于注册callback函数)

typedef void (CALLBACK *cbkSendCmdToMain) (AnsiString sCmd);
cbkSendCmdToMain SendCmdToMain;

void setCallback(CALLBACK *callback); //接口函数

这样SendCmdToMain就是一个指向拥有一个AnsiString形参, 返回值为void的函数指针.

这样, 在接收到命令时, 就可以调用这个函数

[2] 主模块里调用setCallback函数来注册这个回调函数.

在A模块里callback函数具体实现

void CALLBACK SendCmdFun(AnsiString sCmd); //声明
void CALLBACK SendCmdFun(AnsiString sCmd); //定义
{
ShowMessage(sCmd);
}

调用setCallback函数注册回调函数:

setCallback(SendCmdFun);

注意:回调函数一般都要声明为全局的. 如果要在类里使用回调函数, 前面需要加上 static , 其实也相当于全局的.

优点:

为什么要用回调呢?比如我要写一个子模块给你用, 来接收远程socket发来的命令.当我接收到命令后, 需要调用你的主模块的函数, 来进行相应的处理.但是我不知道你要用哪个函数来处理这个命令, 我也不知道你的主模块是什么.cpp或者.h, 或者说, 根本不用关心你在主模块里怎么处理它, 也不应该关心用什么函数处理它。

注:

想知道回调函数在实际中有什么作用?

先假设有这样一种情况:

我们要编写一个库,它提供了某些排序算法的实现(如冒泡排序、快速排序、shell排序、shake排序等等),为了能让库更加通用,不想在函数中嵌入排序逻辑,而让使用者来实现相应的逻辑;

或者,能让库可用于多种数据类型(int、float、string),此时,该怎么办呢?可以使用函数指针,并进行回调。

回调可用于通知机制:

例如,有时要在A程序中设置一个计时器,每到一定时间,A程序会得到相应的通知,但通知机制的实现者对A程序一无所知。那么,就需一个具有特定原型的函数指针进行回调,通知A程序事件已经发生。

实际上,API使用一个回调函数SetTimer()来通知计时器。如果没有提供回调函数,它还会把一个消息发往程序的消息队列。

另一个使用回调机制的API函数是EnumWindow(),它枚举屏幕上所有的顶层窗口,每个窗口都可以通过它调用另一个程序提供的函数,并传递窗口的处理程序。例如:如果被调用者返回一个值,就继续进行迭代;否则,退出。

EnumWindow()并不关心被调用者在何处,也不关心被调用者用它传递的处理程序做了什么,它只关心返回值,因为基于返回值,它将继续执行或退出。

不管怎么说,回调函数是继承自C语言的。在C++中,应只在与C代码建立接口或与已有的回调接口打交道时,才使用回调函数。除了上述情况,在C++中应使用虚拟方法或仿函数(functor),而不是回调函数。

卫朋

人人都是产品经理受邀专栏作家,CSDN 嵌入式领域新星创作者、资深技术博主。2020 年 8 月开始写产品相关内容,截至目前,人人都是产品经理单渠道阅读 56 万+,鸟哥笔记单渠道阅读200 万+,CSDN 单渠道阅读 210 万+,51CTO单渠道阅读 180 万+。

卫朋入围2021/2022年人人都是产品经理平台年度作者,光环国际学习社区首批原创者、知识合作伙伴,商业新知 2021 年度产品十佳创作者,腾讯调研云2022年达人榜第三名。

文章被人人都是产品经理、CSDN、华为云、运营派、产品壹佰、鸟哥笔记、光环国际、商业新知、腾讯调研云等头部垂直类媒体转载。文章见仁见智,各位看官可策略性选择对于自己有用的部分。

相关文章
|
3月前
|
存储 安全 物联网
使用 Java 进行物联网(IoT)应用开发
【4月更文挑战第19天】Java,凭借其跨平台特性和丰富库,成为物联网开发热门选择。开发者利用Java进行物联网应用开发,可实现设备连接、数据处理、数据库管理及安全保障。熟悉Java基础、物联网知识、数据通信和数据库管理是必备技能。利用MQTT客户端、数据存储框架和可视化工具能提升开发效率。随着物联网发展,Java在该领域的影响力将持续增强。
633 1
|
3月前
|
传感器 存储 机器学习/深度学习
物联网(IoT)简介:定义、技术与应用
【5月更文挑战第30天】物联网(IoT)是将物品通过嵌入式系统、传感器及通信技术连接至互联网,实现物物、物人交互和数据共享的技术。其关键包括传感器、通信、嵌入式系统、云计算和人工智能技术。物联网应用于智能家居、智慧城市、工业自动化、农业和健康医疗等领域,通过Arduino等平台可实现简单数据传输。随着技术发展,物联网将深远影响人们生活和工作方式。
277 3
|
9天前
|
存储 传感器 监控
理解并利用物联网(IoT)数据的技术探索
【8月更文挑战第11天】物联网数据是数字化转型的重要资源。通过深入理解物联网数据的特性和价值,并采取有效的收集、处理和分析策略,我们可以更好地利用这些数据为企业决策提供支持、优化运营效率、创造新的商业模式并推动数字化转型的深入发展。
|
11天前
|
存储 物联网 关系型数据库
PolarDB在物联网(IoT)数据存储中的应用探索
随着物联网技术的发展,海量设备数据对数据库提出实时高效存储处理的新要求。PolarDB作为阿里云的高性能云数据库,展现了其在IoT数据存储领域的潜力。面对IoT数据的规模、实时性和多样性挑战,PolarDB凭借分布式架构,实现了高性能、高可靠性和高扩展性,支持动态扩展和冷热数据分层存储,满足IoT数据实时写入、查询及管理需求,展现出广阔的应用前景。
25 1
|
15天前
|
存储 安全 物联网
物联网(IoT)安全:挑战与解决方案
【8月更文挑战第5天】物联网(IoT)深刻改变着我们的生活,但随之而来的安全挑战不容忽视。面对设备身份验证复杂、数据隐私泄露、软件漏洞及资源受限等问题,本文提出加强身份验证、加密保护、定期更新、安全开发生命周期、多层次防御、安全培训及标准化合作等解决方案,旨在构建一个更加安全可靠的物联网环境。
|
21天前
|
传感器 供应链 物联网
ERP系统与物联网(IoT)集成:实现智能化业务管理
【7月更文挑战第29天】 ERP系统与物联网(IoT)集成:实现智能化业务管理
45 0
|
2月前
|
传感器 安全 物联网
物联网(IoT)设备的硬件选型与集成技术博文
【6月更文挑战第28天】物联网设备硬件选型与集成聚焦关键要素:功能匹配、性能稳定性、兼容扩展及成本效益。嵌入式系统、通信协议、数据处理和安全性技术确保集成效果,支撑高效、智能的IoT系统,驱动家居、城市与工业自动化变革。
|
2月前
|
供应链 安全 物联网
物联网(IoT)安全:风险与防护策略
【6月更文挑战第26天】物联网(IoT)安全风险包括数据泄露、设备劫持、DDoS攻击、超级漏洞和不安全设备。防护策略涉及强化设备安全设计、建立认证授权机制、加密数据传输、实施安全监控、加强供应链管理、提升用户安全意识及采用零信任模型。多层面合作以降低安全威胁,确保物联网稳定安全。
|
2月前
|
传感器 人工智能 搜索推荐
人工智能(AI)与物联网(IoT)的融合是当今技术领域的一个重要趋势
人工智能(AI)与物联网(IoT)的融合是当今技术领域的一个重要趋势
|
2月前
|
安全 物联网 物联网安全
物联网(IoT)的兴起与挑战:技术变革的双刃剑
【6月更文挑战第17天】**物联网的崛起带来了智能家居、智慧城市等便利,但安全挑战、设备兼容性和带宽压力也随之而来。加强安全、统一标准及提升处理能力是关键。面对挑战,持续的技术创新和法规完善将推动其健康发展,物联网的未来充满希望。**

热门文章

最新文章