关于回调函数的学习

之前做了很多关于上位机下位机通信的业务以及测试,有很多这样的场景:上位机需要下位的数据然后处理保存,我以什么样的方式获得呢?

1、我上位机每隔多少时间主动去读取。

2、我订阅下位机的数据,当数据改变等满足我的订阅条件时,主动向我发送数据,并且调用我给的回调函数。

第一种情况可能存在很多不必要的访问,比较浪费资源,在我的业务中非常适合订阅回调类似的机制,让其主动通知上位机。

回调函数

以C为例,学习学习回调函数的用处。回调函数的机制就是把回调函数的指针作为参数传递给调用函数,在调用函数中再把数据传递给回调函数执行回调函数。以下代码为例。

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

// 回调函数类型
typedef int (*callback_func)(int,int);
typedef struct 
{
    callback_func back;
}callbackHandle;

// 全局结构体
callbackHandle gloalCallHandle;

// 注册回调函数
void registerCallback(callback_func func)
{
    gloalCallHandle.back = func;
}

// 执行回调函数的调用函数
void perfor(int a,int b)
{
    int max_num = gloalCallHandle.back(a,b);
    printf("max num is:%d",max_num);
}

//回调函数比较大小
int max(int a,int b)
{
    return a > b ? a : b;
}

//模拟消息收到函数
void* sockerec(void* arg)
{
    int a = 869,b = 569;
    sleep(2);
    perfor(a,b);
    return NULL;
}
int main(void)
{
    // 注册回调函数
    registerCallback(max);
    pthread_t thread;
    pthread_create(&thread,NULL,&sockerec,NULL);
    pthread_join(thread,NULL);
    return 0;
}

上述代码模拟了在回调函数max里比较接收到的a,b数据的大小。使用registerCallback注册一个回调函数,当数据到达sockerec执行调用函数perfor,perfor调用函数将接收到的a,b值传给max执行max函数。

发布-订阅模式

发布订阅模式是非常常见的消息传递机制,其中包括生产者,消费者,消息中心。回调函数在其中有很重要的作用。

生产者:负责创建和发布消息到消息中心的实体。

消费者:接收消息中心转发的消息的实体,并且向消息中心订阅感兴趣的主题,提供一个回调函数在接收到消息的时候被调用。

消息中心:消息转发的中介,接收生产者发布的消息,根据主题转发给消费者,消息达到时调用消费者的回调函数。

回调函数:消费者提供,消息中心把消息作为参数传递给回调函数,调用执行,在回调函数里可以实现自己要处理消息的一些逻辑。

回调函数在某些异步操作,事件驱动,模块化和解耦等应用广泛,总之回调函数是一种很好用的机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值