关于回调函数和Sqlite3 回调函数的理解


一、Sqlite3 回调函数理解

有上述内容我们就可以推导出回调函数执行的流程了:

  1. 主函数需要调用回调函数

  2. 中间函数登记回调函数

  3. 触发回调函数事件

  4. 调用回调函数

  5. 响应回调事件

  • 下面举个例子:
    比如你在美团上点了个外卖,并填写了电话号码,外卖员把快递送到楼下,打电话给你,然后你来取外卖。
    在这个例子里,你的电话号码就叫回调函数,填电话号码叫登记回调函数,外卖送到指点地点叫做回调事件,外卖员给你打电话叫做 调用回调函数,你到楼下去买卖叫做 响应回调事件

回调方式有两种:同步回调和异步回调

  • 同步回调是阻塞的,单个的线程需要等待结果的返回才能继续执行。就像你点了外卖,点完外卖之后要一直等,知道等到电话通知才去取外卖。
  • 异步回调是,在同时指定一个函数,在异步任务完成时会自动的调用这个函数。就像你你点了外卖后可以先做自己的事情,看会动漫电影,然后外卖员打电话叫你再去取外卖。

下面的例子中回调函数有callback_1、callback_2、和一个call_test函数,中间函数是handel, 我们传给Handel的函数只要返回值与参数都是int型 就可以作为回调函数,就是这个声明: int Function(int)
代码实例:

 #include <stdio.h>


int Callback_1(int a)   ///< 回调函数1
{
    printf("Hello, this is Callback_1: a = %d \n", a);
    return 0;
}

int Callback_2(int b)  ///< 回调函数2
{
    printf("Hello, this is Callback_2: b = %d \n ", b);
    return 0;
}

int call_test(int x)
{
    printf("Hello, this is Callback test: c = %d \n ", x);
    return 0;
}

int Handle(int x, int (*Callback)(int)) ///< 注意这里用到的函数指针定义
{
    // do someing  to triigger 触发事件
    Callback(x);
}
int main()
{
    Handle(4, Callback_1);
    Handle(5, Callback_2);
    Handle(15, call_test);
    return 0;
}

运行结果:

lzl@ubuntu18:~/my/test/callback$ ./main 
Hello, this is Callback_1: a = 4 
Hello, this is Callback_2: b = 5 
 Hello, this is Callback test: c = 15 

二、sqlite3_exec的回调函数 callback

callback函数原型:

typedef int(*sqlite_callback)(void* para, int columenCount, char** columnValue, char** columnName);

sqlite3中,这个回调函数我们自己定义,设定需要实现的功能。

  • para : 由sqlite3_exec传入的参数指针,或者说是指针参数

  • columnCount: 查询到的这一条记录由多少个字段(多少列)

  • columnValue : 该参数是双指针,查询出来的数据都保存在这里,它是一个1维数组,每一个元素都是一个char*,是一个字段内容,所以这个参数就可以不是单字节,而是可以为字符串等不定长度的数值,用字符串表示,以’\0’结尾

  • columnName : 该参数是双指针,语columnValue是对应的,表示这个字段的字段名称,

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值