参考:https://blog.csdn.net/qawsedrf123lala/article/details/119176116 代码修改为windows下可运行
1、什么是回调函数回调函数就是通过函数指针调用函数。如果把函数的指针或者地址作为参数传递给另一个参数,当这个指针被用来调用其所指向的函数时,那么这就是一个回调的过程,这个被回调的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或者条件发生时由另外的一方调用的,用于对该事件或者条件进行响应。回调函数就是在两个独立函数或者独立类通信的通道。
2、回调函数和普通函数的区别- 对普通函数的调用:调用程序发出对普通函数的调用后,程序执行立即转向被调用函数执行,直到被调用函数执行完毕后,再返回调用程序继续执行。从发出调用的程序的角度看,这个过程为“调用–>等待被调用函数执行完毕–>继续执行”。
- 对回调函数调用:调用程序发出对回调函数的调用后,不等函数执行完毕,立即返回并继续执行。这样,调用程序执和被调用函数同时在执行。当被调函数执行完毕后,被调函数会反过来调用某个事先指定函数,以通知调用程序:函数调用结束。这个过程称为回调(Callback),这正是回调函数名称的由来。
- 回调可以是同步也可以是异步
- 同步可以是单线程也可以是多线程
- 异步必须是多线程或多进程(每个进程可以是单线程) ==> 换句话说,异步必须依靠多线程或多进程才能完成
(1) 同步回调:把函数b传递给函数a。执行a的时候,回调了b,a要一直等到b执行完才能继续执行;
(2) 异步回调:把函数b传递给函数。执行a的时候,回调了b,然后a就继续往后执行,b独自执行。
4. 同步回调的实现实现效果:
代码如下:
// CallbackTest1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // C代码实现的同步回调函数 #include "pch.h" #include5、异步回调的实现#include #include // C函数:回调函数 int RemoteControl(const char *actions[], int actions_len) { printf("C回调函数被调用. ==> 你朋友通过你开的 ***远程控制*** 操作你的电脑.n"); for (int i = 0; i < actions_len; i++) { printf(">> %sn", actions[i]); } printf("C回调函数返回. ==> 处理完毕,退出远程的使用.n"); return 0; } // B函数 int YourFriend(int RControl(const char *actions[], int actions_len)) { // actions是提供的一些动作 const char *actions[] = { "右键计算机", "选择属性", "选择高级系统设置", "... ..." }; printf("B函数被调用. ==> 你朋友收到你的求助.n"); RControl(actions, 4); // 回调函数的执行 printf("B函数返回. ==> 你朋友向你反馈处理结果.n"); return 0; } // A函数 int You() { printf("A函数启动. ==> 你用电脑,遇到了问题.n"); printf("A函数调用B函数. ==> 你向你朋友发起求助,同时提供 ***远程控制*** 给他.n"); YourFriend(RemoteControl); printf("A函数返回. ==> 你出门办事.n"); return 0; } int main() { You(); return 0; }
异步回调必定是多线程或者多进程的,不可能是单线程或者单进程的。



