C语言中的回调函数
来源:互联网 发布:会计软件中的成本核算 编辑:程序博客网 时间:2024/04/28 13:16
C语言中通过函数指针实现回调函数(Callback Function)
====== 首先使用typedef定义回调函数类型 ======
- typedef void (*event_cb_t)(const struct event *evt, void *userdata);
====== 定义并实现一个函数用于注册回调函数 ======
- int event_cb_register(event_cb_t cb, void *userdata);
下面是注册回调函数my_event_cb的一个模板
- static void my_event_cb(const struct event *evt, void *data)
- {
- /* do stuff and things with the event */
- }
- ...
- event_cb_register(my_event_cb, &my_custom_data);
- ...
在事件调度器(event dispatcher)中,常常将回调函数放在结构体中,
- struct event_cb {
- event_cb_t cb;
- void *data;
- };
- struct event_cb *callback;
- ...
- /* Get the event_cb that you want to execute */
- callback->cb(event, callback->data);
====== 一个回调函数的例子 ======
- #include <stdio.h>
- struct event_cb;
- typedef void (*event_cb_t)(const struct event_cb *evt, void *user_data);
- struct event_cb
- {
- event_cb_t cb;
- void *data;
- };
- static struct event_cb saved = { 0, 0 };
- void event_cb_register(event_cb_t cb, void *user_data)
- {
- saved.cb = cb;
- saved.data = user_data;
- }
- static void my_event_cb(const struct event_cb *evt, void *data)
- {
- printf("in %s\n", __func__);
- printf("data1: %s\n", (const char *)data);
- printf("data2: %s\n", (const char *)evt->data);
- }
- int main(void)
- {
- char my_custom_data[40] = "Hello!";
- event_cb_register(my_event_cb, my_custom_data);
- saved.cb(&saved, saved.data);
- return 0;
- }
0 0
- 探讨C语言中的回调函数
- c语言中的回调函数
- 探讨C语言中的回调函数
- C语言中的回调函数
- 探讨C语言中的回调函数
- 探讨C语言中的回调函数
- C语言中的回调函数
- 探讨C语言中的回调函数
- 探讨C语言中的回调函数
- 探讨C语言中的回调函数
- c语言中的回调函数
- C语言中的回调函数
- 浅谈C语言中的回调函数
- C语言中的回调函数
- C语言中的回调函数实例
- C语言中的回调函数实例
- 探讨C语言中的回调函数
- C语言中的回调函数实例
- js indexOf的用法
- android root权限
- C语言,使用for循环打印数字直角三角形
- 一个产品经理的用户洞察法则
- 程序员成长历程的四个阶段
- C语言中的回调函数
- 配置hibernate和mysql,使hibernate运行在mysql cluster上
- quick-cocos2d-x -2 打不开"player.app"
- libsvm使用步骤
- 一键安装 redmine on windows 和发邮件设置
- A Performance Evaluation and Examination of Open-Source Erasure Coding Libraries For Storage
- Qt学习笔记2014.7.17.14:04——设置文字加粗、倾斜、下划线、颜色
- xen tools代码结构
- Xcode4.6下添加百度地图ios版(BMapKit)详细教程(_BMKMapManager错误解决)