嵌入式Linux上的C语言编程实践--第11章-回调函数的使用.pptVIP

嵌入式Linux上的C语言编程实践--第11章-回调函数的使用.ppt

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

1第11章回调函数的使用当函数指针做为函数的参数,传递给一个被调用函数,被调用函数就可以通过这个指针调用外部的函数,这就形成了回调。回调函数是C语言中的一种常用的高级应用,在库函数和应用程序中都有广泛的应用。本章要点:回调函数的调用方式回调函数的完全形式的参数传递原那么C语言库函数的回调函数使用

11.1回调函数的概念与作用回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。回调函数的特点:可以在下层软件模块〔宏观上的被调用者〕中调用来自上层软件模块〔宏观上的调用者〕中的函数,

打个通俗的比方:老板给你交代一项任务,让你给某工程做个方案,尽快完成,完成后给他的秘书打个,并把报价和工程周期告诉给秘书,秘书要和用户联系并对工程评估。这里面有几项要素:1、老板--上层2、你--底层3、某工程--参数4、秘书--回调函数5、老板给你交待任务--上层调用下层5、秘书的--上层传给下层的参数:函数指针6、报价和工程周期--需要返回的数据〔回调函数的参数〕7、尽快--没有要求是马上,因此是异步方式8、完成后给秘书打--通过函数指针回调9、和用户联系并对工程评估--执行回调函数那么,回调函数可以理解为:下层对上层的调用,回调函数的地址就是下层完成工作之后通知上层〔秘书〕的联络方式,调用回调函数的参数是下层完成工作之后返回上层〔秘书〕的数据,回调函数的实现就是秘书接到和数据之后要做的工作。

11.1.1程序调用的方式软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用回调异步调用同步调用是最常用的调用方式,由上层模块调用下层模块。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回。从调用方向上看,它是一种单向调用。

回调回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;如右图所示,调用方式为A?B?C。其中函数C为回调函数。回调函数由上层模块实现,由下层模块调用。回调函数的作用:监视B的运行状态并反响干预B的运行

异步调用异步调用是一种类似消息或事件的机制,下层模块接受上层模块的命令,当发生某个事件时,下层模块将调用上层模块的函数。异步调用一般基于回调函数的注册机制。调用方式为A调用B进行注册后立即返回,当某个事件发生后,由下层模块中的D调用C在回调和异步调用中,都涉及到回调函数。回调是异步调用的根底。回调函数的根底是函数类型的指针。

11.1.2回调函数的作用回调函数由上层软件模块实现,并将这个函数的入口地址以函数指针参数的形式传递给下层软件模块,由下层的软件模块在某个时刻调用。函数指针可以直接作为函数参数进行传递,也可以作为结构体的成员进行传递。回调函数的调用方式:在上层模块调用的下层模块的函数中,直接调用回调函数。使用注册的方式,在某个事件发生的时候由下层模块的函数调用回调函数。

本例中,这几个函数是在同一个文件当中。假设libfun是一个库中的函数,就只有使用回调了,通过函数指针参数将外部函数地址传入来实现调用.函数add的代码作了修改,也不必改动库的代码,就可以正常实现调用,便于程序的维护和升级

11.2回调函数的语法11.2.1简单的回调函数最简单的回调函数:无参数、无返回值的函数实现方法:定义回调函数声明该函数的指针,并让其指向该回调函数调用回调函数的调用者,并将回调函数的指针作为调用参数

定义回调函数voidsimple_callback(void){printf(“++++simple_callback+++++\n”);return;}定义回调函数指针类型:Typedefvoid(*T_SIMPLE_CALLBACK)(void);

调用回调函数的函数的定义〔通常由下层模块定义〕voidtest_simple_callback(T_SIMPLE_CALLBACKp_simple_callback){printf(“==test_simple_callbackBegin=\n”);if(p_simple_callback)(*p_simple_callback)();elseprintf(“---no_callback----\n”);printf(“====test_simple_callbackEnd===\n”);return;}

在主函数中调用回调函数的调用函数intmain(intarg

文档评论(0)

199****8042 + 关注
实名认证
文档贡献者

相信自己,相信明天

1亿VIP精品文档

相关文档