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

ns-3的c++代码规范

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

C++中回调(CallBack)的使用思路

  • 2010年08月24日 10:56
  • 74KB
  • 下载

OkHttp学习(3)-->>同步、异步之上传文件至服务器(重写RequestBody方法,实现上传进度接口回调)

Volley学习篇,实例代码均成功 Volley学习(一)Android Volley源码解析 Volley学习(二)简封Volley、为Volley请求头体添加Json参数、Gson和JsonO...

c++调用dll,实现消息回调

  • 2014年03月13日 12:48
  • 17.45MB
  • 下载

3.Android loader详解___重启与回调

重启装载器当你使用initLoader()时,如果指定ID的装载器已经存在,则它使用这个装载器.如果不存在呢,它将创建一个新的.但是有时你却是想丢弃旧的然后开始新的数据.要想丢弃旧数据,你应使用res...

c++回调c#方法

  • 2013年10月17日 14:28
  • 23KB
  • 下载

Android Camera HAL3中拍照Capture模式下多模块间的交互与帧Result与帧数据回调

1. HAL3中Camera2Client下的take picture的入口函数 作为标准的capture picture功能的入口,主要完成了以下两件事情: updateProcessorStr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NS3 回调 C++
举报原因:
原因补充:

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