任何人都可以通过一些例子在C中注册一个回调函数来告诉我我们究竟是什么意思吗?我在网上搜索了很多,但我得不到满意的答案.甚至在堆栈溢出中搜索,但无法得到完美的想法.
什么是Notify回调和异步回调?
cni*_*tar 13
注册回调函数只是意味着您正在安排外部实体来调用您的函数.
它可能会在以后发生,或者可能会立即发生.一个简单的例子是qsort.声明如下:
void qsort(void *base, size_t nel, size_t width,
int (*compar)(const void *, const void *));
Run Code Online (Sandbox Code Playgroud)
为了使用它,您必须将指针传递给比较元素的函数 - 回调.
这是一个简单的例子,但通常"注册回调"意味着将函数指针传递给将来会为你调用它的人.
注册回调意味着将函数指针传递给将通过指针调用您的函数的人
为了更容易理解,考虑 A 和 B,它们是代码中涉及的两个实体。A 写了一个函数说 myFunc
char myFunc(int a)
{
/* Code written by A*/
}
Run Code Online (Sandbox Code Playgroud)
现在,当说 A 将向 B 注册回调时,这意味着 A 将函数指针发送给 B 通过将函数指针发送给 B,A 提供了对该函数的访问
要注册回调将有一个函数,其中 A 可以传递指针 A 将调用该函数
cb_register(myFunc);
// Passed the address of Function
Run Code Online (Sandbox Code Playgroud)
这个 cb_register 函数在 B 中定义为
typedef void (*cb_fn_ptr)(int a);
void cb_register(cb_fn_ptr cb)
{
// In this function B can store the address in a structure member
}
Run Code Online (Sandbox Code Playgroud)
例如,声明了一个 struct_B 来存储
struct s_B {
cb_fn_ptr cb;
// cb will have address whenever B
};
Run Code Online (Sandbox Code Playgroud)
B 已经存储了地址(函数指针指向的地址),以后可以用它来调用函数。
当 B 通过函数指针调用函数时,它被称为回调。 B 只需要知道函数的原型就可以调用该函数,并且可以完全不知道该函数在做什么。在这种情况下,函数将调用为
struct s_B temp;
char ret_val;
int arg_val;
ret_val = temp->cb(arg_val)
//This is a callback
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11685 次 |
| 最近记录: |