NS3 回调 C++

原创 2014年04月15日 22:10:10

今天看《NS3网络模拟器 基础及应用》,看到了回调这一块,基本介绍,可以参见:http://hi.baidu.com/ritrachiao/item/977924c32637db5ebdef69a3

大概是说,大型系统为了降低模块之间的依赖关系,提出了回调机制-callback。

首先,我们将来看看什么是回调机制,然后看看怎么应用回调机制。

1. 什么是回调,参考知乎上的理解:http://www.zhihu.com/question/19801131

顾名思义,回调是回头过来调用的意思。举一个简单的栗子,我们去食堂吃饭,点了一个菜,可能得等会,这段时间我们可以拿来干其它事情,比如玩游戏什么的,然后跟老板说,我坐在**座位上,做好了直接叫我过来就可以了。

这个过程中,首先,我们在老板那里注册了信息,提交了我们的座位信息,然后师傅做好之后,触发了事件,过来通知我们过来拿饭(回调)。 系统中,很多定时任务也是这样的。


2. 怎么应用回调?参考:http://blog.csdn.net/jackystudio/article/details/11720325

回调其实,就是一个函数指针,这个指针指向函数的初始地址。

函数指针的声明:

typedef 返回类型(*函数指针类型名)(函参列表);

刚开始看到这个,我理解了半天,后来翻一翻谭浩强的C语言,就立马理解了。   我们定义一个函数指针,是这样的:

void (*f)(int a,int b)
指针f ,指向了一个函数,有返回值和形参。typedef的用法是这样的:

1. 先安定义变量的方法写出定义体,比如前面的,void (*f)(int a,int b);
2.将变量名换成新类型名,比如,将f换成CALLBACK;
3.在最前面加typedef,比如typedef void (*CALLBACK)(int a,int b);
4.然后用新类型去定义变量。

关于给函数指针赋值的问题,可以赋值为函数名,也可以是函数名取地址,两者的值是相同的,具体参见:http://my.oschina.net/mavericsoung/blog/174110 ,类似于数组名和数组第一个元素的地址一样。

C语言中的回调怎么写呢?

/*
 * main.cpp
 *
 *  Created on: 2014-4-15
 *      Author: zy
 */
#include <iostream>
using namespace std;
typedef void(*FUN)(int,int); //定义函数指针类型

void min(int a,int b);
void max(int a,int b);

void min(int a,int b)
{
	int minvalue=a<b?a:b;
	std::cout<<"min value is "<<minvalue<<"\n";
}

void max(int a,int b)
{
	int maxvalue=a>b?a:b;
	std::cout<<"Max value is "<<maxvalue<<"\n";
}
//void test(void (*f)(int a,int b),int a,int b)
void test(FUN f,int a,int b)
{
	f(a,b);
}

int main()
{
	FUN pFun=NULL; //定义函数指针变量pFun
	pFun=&min;


	test(min,1,2);
	test(&max,1,2);
	return 0;
}

3. 回调函数的常见应用

(1)比如多线程中线程创建函数:

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
中间的void *(*start_routine) (void *)就是一个函数指针。

(2)而C++的模板,也就是泛型,也是通过回调函数来实现的,具体可以参见:http://hi.baidu.com/sunmoon_zheng/item/187a3e9891b9f2f22816477f

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

NS3中回调

在了解NS3回调机制前先学习C/C++中的函数指针 函数指针指的是指向函数的指针(* ptr) 声明形式: 返回类型 (*函数指针名)(函数形參表)(=初始值) C语言中的函数指针: int (*p)...

ns3中callback的机制

callback的机制是不好理解的,因此将callback相关的api开放出来很难,这导致用python直接写ns3例子时,一旦出现callback注册就会卡壳。因此使用python编码不如仍然使用C...

NS-3 中 Callback与MakeCallback的简单说明

Callback 与  MakeCallback是成对出现的。 1. Callback http://www.nsnam.org/doxygen/classns3_1_1_callback.h...

【C++基础之八】函数指针和回调函数

C++很多类库都喜欢用回调函数,MFC中的定时器,消息机制,hook机制等待,包括现在在研究的cocos2d-x中也有很多的回调函数。 1.回调函数 什么是回调函数呢?回调函数其实就是一个通过函数指针...

NS3回调问题

最近学习了Decload的关于NS3中socket的使用,想要稍作修改,发现自己实在是基础很不扎实,需要补补啊! /* -*- 20160328 wsy 继续尝试 -*- */ /*  * 实现...

ns-3的c++代码规范

ns-3的c++代码规范 该文档 txt 版本详见:  http://download.csdn.net/detail/barcodegun/3704860 ns-3学习交流: b...

Android RadioGroup.check() onCheckedChanged 回调 3 次 FragmentTransaction.commit() 不会 立即 起作用

昨天遇到了个Android问题,java.lang.IllegalStateException: Fragment already added. backtrace里边没有自己的代码.(好像是frag...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)