当前位置: 首页 > news >正文

C语言.回调函数

回调函数

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

以下是通俗的解释:

回调,其实就是callback的英文翻译:通俗理解,call back:打回去
你去店里买东西,老板说没货了,让你留一个联系你的方法,(这个方法包含一些具体怎么做,比如几点可以联系你,用wx还是电话),到货了就使用这个方法来通知你。
换句话说,就是顾客留下了打电话给顾客的一个具体的方法(即函数),然后由商家去调用这个方法。

1、当定时器,时间中断触发时,将运行回调函数。

static void Ver_Screen_TimeHandler(void)
{nvram_fota_info *updateInfo = icare_GetUpgradeInfo();if(app_get_scrn_id() == SCRN_VERSION_ID){drawVerScreen();if(updateInfo->state == 3)Gui_Timer_Start(1000 , **Ver_Screen_TimeHandler_reset**);elseGui_Timer_Start(1000 , **Ver_Screen_TimeHandler**);//当定时器,时间中断触发时,将运行回调函数。}
}
uint8_t startFuncTimer(uint8_t id, uint16_t timeSlice, uint8_t isRepeat,void *param, TimerFuncPtr timerCallback)
{wolf_dbgLog(_LOG_RTT, "startFuncTimer: enter(%d)!\n", id);if(id > TIMER_MAXID || id == TIMER_INVALID)return TIMER_INVALID;id -= 1;g_sFuncTimer[id].isStarted = 1;g_sFuncTimer[id].isRepeat = isRepeat;g_sFuncTimer[id].timeSlice = timeSlice;g_sFuncTimer[id].curCountDown = timeSlice;g_sFuncTimer[id].param = param;g_sFuncTimer[id].timerCallback = timerCallback;//当定时器,时间中断触发时,将运行回调函数。return id + 1;
}
static int8_t bt_hands_timeout(uint8_t id, void *param)
{hands_send();g_sBtContext.handsRetryTimes ++;if(g_sBtContext.handsRetryTimes < 3){startFuncTimer(TIMER_BT_HANDS_ID, 5, 0, NULL, bt_hands_timeout);//当定时器,时间中断触发时,将运行回调函数。}wolf_dbgLog(_LOG_SYS, "[bt] retry=%d", g_sBtContext.handsRetryTimes);return 0;
}
http://www.lryc.cn/news/413772.html

相关文章:

  • 《从零开始:使用Python构建简单Web爬虫》
  • 最新个人免签约支付系统源码|PHP源码 | 码支付系统 | ThinkPHP6框架 | 开源
  • The Llama 3 Herd of Models 第4部分后训练的全文
  • MongoDB性能调优
  • 【Qt开发】调试log日志QDebug重定向输出到textEdit等控件(qInstallMessageHandler回调函数)
  • 【JavaEE精炼宝库】 网络编程套接字——UDP业务逻辑 | TCP流套接字编程及业务逻辑实现
  • 前端过渡动画
  • actual combat 38 ——vue
  • 测试面试宝典(四十七)— 功能测试用例一般包含哪些内容
  • rust_mac环境安装
  • 【前端面试】七、算法-递归
  • CmsEasy逻辑漏洞--零元购
  • Linux 内核源码分析---I/O 体系结构与访问设备
  • 在cPanelWHM中如何重置 MySQL 用户帐户密码
  • 软件测试基础1--功能测试
  • 《计算机网络》(第8版)第9章 无线网络和移动网络 复习笔记
  • 非负数、0和正整数 限制最大值且保留两位小数在elementpuls表单中正则验证
  • Java多线程-----定时器(Timer)及其实现
  • 【Linux修行路】进度条小程序
  • 网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。
  • 【探索Linux】P.44(数据链路层 —— 以太网的帧格式 | MAC地址 | MTU | ARP协议)
  • <数据集>航拍行人识别数据集<目标检测>
  • 在 Windows 10 系统上部署 Medusa
  • Linux进程 (冯诺依曼体结构 管理 PCB 进程状态 僵尸进程 孤儿进程 运行阻塞挂起状态 进程优先级)
  • 《LlamaIndex 之美》-01-LLM、Prompt、Embedding基础入门
  • C++ 智能指针简单介绍及用法
  • k8s笔记之创建Istio Gateway规则
  • NAND行业回归盈利:AI与云存储需求驱动
  • 【限免】频控阵雷达:概念、原理与应用【附MATLAB代码】
  • 从0开始搭建vue + flask 旅游景点数据分析系统( 六):搭建后端flask框架