文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>回调函数小例子

回调函数小例子

时间:2010-07-15  来源:happycozy

C语言软件设计模式中回调函数使用

转:http://www.wanggl.info/2010/06/c%e8%af%ad%e8%a8%80%e8%bd%af%e4%bb%b6%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f%e4%b8%ad%e5%9b%9e%e8%b0%83%e5%87%bd%e6%95%b0%e4%bd%bf%e7%94%a8/

回调是一种重要的软件设计模式,要模块之间进行通信的一种方式。

下面通过一个例子简明回调:

大家都有过从硬盘复制文件的经历,如果文件比较大的话,就从看到一个进程条在滚动,这是如何实现的呢?

首先,我们分为UI模块和底层模块。其中,UI是可以用来显示进度条在滚动的过程,而在底层模块是实现COPY操作的函数,底层模块是不能显示进度条的。如果要实现这个过程,需要做的工作如下:UI调用COPY函数实现文件的COPY,而底层是知道COPY的进度的,但其自身是不能显示进度的,所以底层不断的每隔相对短的一个时间内调用UI实现的显示进度函数而完成。

重点讲一下我们如何使用回调函数:

欲知回调函数,先知函数指针。int * abc(int xyz)与int (*abc)(int xyz)两者有什么区别呢?第一个是一个参数为int返回值为int *类型指针的函数,第二个是一个指针类型,这种指针指向参数为int 返回值为int型的函数。在第二个里面abc就是一个函数指针。

下面有比如UI和COPY两个模块来实现上面的功能,代码清单如下:

/* copy.h */
#ifndef _COPY_H_
#define _COPY_H_
typedef void (*PorcCallback)(int );
void UICallback(PorcCallback callback); 
#endif

/* copy.c */

#include “copy.h”

PorcCallback  g_callback;

void UICallback(PorcCallback callback)

{

       g_callback = callback;

       int i = 0;

       for(i;i<10;i++)

       g_callback(i);

}

/* ui.c */

#include <stdio.h>

#include “copy.h”

void out(int n)

{

       printf(“%d\n”,n);

}

int main(int argc, char *argv[])

{

       UICallback(out);

       return 0;

}

运行结果如下:

0

1

2

3

4

5

6

7

8

9

请按任意键继续. . .

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载