回调函数的使用:案例一:c语言简单信号与槽机制。

这篇具有很好参考价值的文章主要介绍了回调函数的使用:案例一:c语言简单信号与槽机制。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录



前言

了解回调函数的基本概念,函数指针的使用、简单信号与槽的实现机制;


一、回调函数

1.1 回调函数基本概念

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。

A “callback” is any function that is called by another function which takes the first function as a parameter。
也就是说,函数 F1 调用函数 F2 的时候,函数 F1 通过参数给 函数 F2 传递了另外一个函数 F3 的指针,在函数 F2 执行的过程中,函数F2 调用了函数 F3,这个动作就叫做回调(Callback),而先被当做指针传入、后面又被回调的函数 F3 就是回调函数。

回调函数的使用:案例一:c语言简单信号与槽机制。,c语言,开发语言

1.2 简单实现

创建函数指针,指向指定函数。

void hanshus1()
{
    cout <<"my hanshus1"<<endl;
}

int hanshus2(int)
{
    cout <<"my hanshus2"<<endl;
    return 0;
}

void (*hanshu1)();
int (*hanshu2)(int);
int main()
{
    hanshu1 = hanshus1;
    hanshu1(); // 输出 " my hanshus1 "
    hanshu2 = hanshus2;
    hanshu2(2); // 输出 “my hanshus2”
}

二、代码案例

简单实现信号与槽机制:
参考代码:
https://blog.csdn.net/weixin_41374099/article/details/115687655

1.代码示例

代码如下(示例):

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;

#define MAX_SLOT_FUNCTION 20  //一个信号最多连接的槽函数数 //一个函数可以被任意多个信号连接

//槽函数类型
typedef void (*slot_t)();

//信号类型
typedef struct _signal_t 
{
	slot_t slot[MAX_SLOT_FUNCTION];
	int count; //槽函数数量
}signal_t;

//信号初始化
signal_t* signal();

//添加槽函数
void connect(signal_t* _signal, slot_t _slot);

//发射信号
void emit(signal_t* _signal);

//销毁
void del(signal_t* _signal);

//信号初始化
signal_t* signal() 
{
	signal_t* s = (signal_t*)malloc(sizeof(signal_t));
	s->count = 0;
	for (int i = 0; i < MAX_SLOT_FUNCTION; ++i) 
	{
		s->slot[i] = NULL;
	}
	return s;
}

//添加槽函数
void connect(signal_t* _signal, slot_t _slot)
{
	_signal->slot[_signal->count] = _slot;
	++_signal->count;
}

//发射信号
void emit(signal_t* _signal) 
{
	for (int i = 0; i < _signal->count; ++i)
	{
		slot_t  func = _signal->slot[i];
		if (func != NULL) // 
		{
			func();
		}
	}
}

//销毁
void del(signal_t* _signal) {
	for (int i = 0; i < _signal->count; ++i)
	{
		_signal->slot[i] = NULL;
	}
	_signal->count = 0;
	free(_signal);
}

//准备几个槽函数!!!
void setup()
{
	static int i = 0;
	printf("setup > 我被点击了%d次,啊啊啊啊\n", ++i);
}

void draw() 
{
	static int i = 0;
	printf("draw > 我被点击了%d次,啊啊啊啊\n", ++i);
}

void loop()
{
	static int i = 0;
	printf("loop > 我被点击了%d次,啊啊啊啊\n", ++i);
}

void test() 
{
	//自定义信号
	signal_t* clicked = signal();
	signal_t* moved = signal();
	
	connect(clicked, setup);
	connect(clicked, draw);
	connect(clicked, loop);

	connect(moved, setup);
	connect(moved, draw);

	//发射信号
	printf("---------------------------------------\n");
	emit(clicked);
	emit(clicked);

	printf("---------------------------------------\n");

	emit(moved);
	emit(moved);
	emit(moved);

	printf("---------------------------------------\n");
	emit(clicked);
	emit(clicked);
	emit(clicked);

	printf("---------------------------------------\n");


}
int main()
{
	test();
	return 0;
}

运行截图:
回调函数的使用:案例一:c语言简单信号与槽机制。,c语言,开发语言文章来源地址https://www.toymoban.com/news/detail-614018.html


总结

  • 回调函数和普通函数的区别;
  • 函数指针的使用
  • 信号与槽的机制

到了这里,关于回调函数的使用:案例一:c语言简单信号与槽机制。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 8.31 加载资源文件 信号与槽机制

     登录窗口 主函数  登录成功后的窗口  登录失败后的窗口

    2024年02月10日
    浏览(31)
  • Qt——Qt工作原理:事件驱动、信号与槽机制

    Qt作为一个现代的GUI(图形用户界面)框架,采用了事件驱动的编程范式,并引入了信号与槽机制,以实现高度交互和松耦合的程序设计。下面详细解释了相关概念,以及如何在Qt中使用它们。 事件是在GUI应用程序中的控件上产生的各种动作、操作或状态变化,例如鼠标移动

    2024年02月10日
    浏览(33)
  • Qt子窗口给父窗口传值(信号与槽机制)

    1、父窗口和子窗口名称介绍 父窗口:Test_7 子窗口:testnew 2、父窗口与子窗口内容介绍 子窗口:声明信号、发送信号 父窗口:声明槽函数,定义槽函数,connect连接 3、在父窗口中(Test_7.cpp),完整代码如下: 4、父窗口中(Test_7.h),完整代码如下:  5、子窗口(testnew.cp

    2024年02月11日
    浏览(32)
  • Qt (ui界面)信号与槽函数 组件连接

    重点:信号与槽连接机制。 难点:信号与槽函数的 参数使用。 头函数: 原函数: 测试函数: 测试结果:

    2024年02月14日
    浏览(34)
  • 【python】软件开发——PyQt5、Qt Designer、信号与槽机制、计算器实现

    PyQt5 是一个基于 Python 的 GUI 框架,用于创建跨平台的桌面应用程序。它是 Qt 库的 Python 绑定,结合了 Python 的简洁和易用性以及 Qt 框架的强大功能。 Qt 是一个流行的 C++ 跨平台应用程序开发框架,提供了丰富的图形界面组件、网络通信、数据库访问、多线程等功能。PyQt5 允许

    2024年02月04日
    浏览(31)
  • c语言中回调函数的理解和使用

    返回总目录 回调函数是通过函数指针实现的。可以将调用者和被调用者进行解耦,通过一个函数指针可以关联不同的函数实现,实现前提是函数指针和函数实现的参数类型一致,用户通过把需要调用函数的指针作为参数传递给一个函数进行实现,可以实现个功能模块之间的解

    2024年02月15日
    浏览(22)
  • c语言函数指针和指针函数的区别,以及回调函数的使用。

    函数指针 是什么,函数指针本质也是指针,不过是指向函数的指针,存储的是函数的地址。 指针函数 是什么,指针函数其实就是返回值是指针的函数,本质是函数。 函数指针是如何定义的呢,如下 这里 * pfun 需要 加括号 ,否则定义为了指针函数。 指针函数的定义如下: 下面

    2024年02月11日
    浏览(36)
  • 回调函数与Qt信号槽

    回调函数的本质是基于“想让别人的代码执行自己的代码,而别人的代码你不能随意改变”这种思维产生的,回调函数是函数指针的一种用法,如果多个类都关注某个类的状态变化,此时需要维护一个列表,以存放多个回调函数的地址,对于每一个被关注的类,都需要做类似

    2023年04月12日
    浏览(19)
  • 【C语言】回调函数,qsort排序函数的使用和自己实现,超详解

    先记录一下访问量突破2000啦,谢谢大家支持!!! 这里是上期指针进阶链接,方便大家查看:添加链接描述 大家好呀,今天分享一下上期指针进阶中剩余的内容——回调函数,这个很重要滴,让我们一起来学会学懂他吧!!! 标准概念: 回调函数就是一个通过函数指针调

    2024年02月12日
    浏览(40)
  • C++ Qt开发:如何使用信号与槽

    在Qt中,信号与槽(Signal and Slot)是一种用于对象之间通信的机制。是Qt框架引以为傲的一项机制,它带来了许多优势,使得Qt成为一个强大且灵活的开发框架之一。信号与槽的关联通过 QObject::connect 函数完成。这样的机制使得对象能够以一种灵活而松散耦合的方式进行通信,

    2024年02月05日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包