栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++学习之回调函数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++学习之回调函数

参考:https://blog.csdn.net/qawsedrf123lala/article/details/119176116 代码修改为windows下可运行

1、什么是回调函数

回调函数就是通过函数指针调用函数。如果把函数的指针或者地址作为参数传递给另一个参数,当这个指针被用来调用其所指向的函数时,那么这就是一个回调的过程,这个被回调的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或者条件发生时由另外的一方调用的,用于对该事件或者条件进行响应。回调函数就是在两个独立函数或者独立类通信的通道。

2、回调函数和普通函数的区别
  • 对普通函数的调用:调用程序发出对普通函数的调用后,程序执行立即转向被调用函数执行,直到被调用函数执行完毕后,再返回调用程序继续执行。从发出调用的程序的角度看,这个过程为“调用–>等待被调用函数执行完毕–>继续执行”。
  • 对回调函数调用:调用程序发出对回调函数的调用后,不等函数执行完毕,立即返回并继续执行。这样,调用程序执和被调用函数同时在执行。当被调函数执行完毕后,被调函数会反过来调用某个事先指定函数,以通知调用程序:函数调用结束。这个过程称为回调(Callback),这正是回调函数名称的由来。
3、同步回调和异步回调的区别
  • 回调可以是同步也可以是异步
  • 同步可以是单线程也可以是多线程
  • 异步必须是多线程或多进程(每个进程可以是单线程) ==> 换句话说,异步必须依靠多线程或多进程才能完成

(1) 同步回调:把函数b传递给函数a。执行a的时候,回调了b,a要一直等到b执行完才能继续执行;

(2) 异步回调:把函数b传递给函数。执行a的时候,回调了b,然后a就继续往后执行,b独自执行。

4. 同步回调的实现

实现效果:

代码如下:

// CallbackTest1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// C代码实现的同步回调函数

#include "pch.h"
#include 
#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;
}
5、异步回调的实现

异步回调必定是多线程或者多进程的,不可能是单线程或者单进程的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976512.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号