最简单易懂的方式来介绍什么回调函数(Callbacks)

文章目录1. Callback(回调函数)1.1. 什么是回调函数?1.2. 分类1.3. 用途1.4. 为什么要使用回调函数?1.5. 代码实现1. Callback(回调函数)1.1. 什么是回调函数?将函数指针作为一个参数传递给另一个函数。把函数的指针(地址)作为另一个函数参数的入口地址传递,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。1.2. 分类根据回调函数在运行时控制数据流的方式不同,可以为两种类型的回调函数。阻塞回调(Blocking callbacks)
摘要由CSDN通过智能技术生成

1. Callback(回调函数)

1.1. 什么是回调函数?

  • 将函数指针作为一个参数传递给另一个函数。
  • 把函数的指针(地址)作为另一个函数参数的入口地址传递,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。

1.2. 分类

根据回调函数在运行时控制数据流的方式不同,可以为两种类型的回调函数。

  • 阻塞回调(Blocking callbacks),也叫同步回调(synchronous callbacks)或者直接叫回调函数(callbacks)。阻塞回调函数调用是发生在函数返回之前。阻塞回调通常不用于异步或将当前的工作委托给另外一个线程的情况。

  • 延迟回调(Deferred callbacks),也叫异步回调(asynchronous callbacks)。延时回调函数调用是发生在函数返回之后。延时回调函数常常使用在I/O操作或事件处理(event handing)中,,通过中断或多线程来调用。

Windows系统中使用回调函数,应用程序提供一个特定的自定义回调函数给操作系统调用,然后这个应用程序需要实现特定的函数功能,像鼠标点击或键盘按下。

windows系统中外部应用程序与系统库函数之间通过 callback 函数实现的流程。
在这里插入图片描述

在这个调用的过程中最关心的是如何进行权限(privilege)与安全(security)管理,当这个函数被操作系统调用时,它不应该带有同操作系统一样的权限。解决的方案是使用 rings 保护。

rings: 操作系统如何实现特权管理的一种手段。

1.3. 用途

  • 错误信号处理。当Unix系统收到 SIGTERM 信号时,不想让Terminal立刻收到它,为了确保terminal处理的是正确的,它会注册一个 cleanup 函数作为回调函数。回调函数也许被使用来控制 cleanup 函数是否被执行。
  • C++中 functor 普遍的使用就是 function pointer
  • 进程与线程之间进行通信。

1.4. 为什么要使用回调函数?

  • 把调用者与被调用者分开进行实现。
  • 开发者在库中封装了一套采用函数指针实现的接口,接口函数的参数就是用户实现函数的地址。
  • 将回调函数(callback)传递给调用函数(calling function)的代码不需要知道将传递给调用函数的参数值有哪些。如果传递的是返回值,则需要公开暴露这些参数。

1.5. 代码实现

实例一:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* Th
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值