NS3 回调 C++

2014-11-24 11:56:01 · 作者: · 浏览: 2

今天看《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 
  
   
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<<"Max value is "<
    
     
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