转的 何謂callback function?

转载 2006年06月16日 17:44:00

何谓callback function

简单的说,如果你使用了某个function,那么你就是『call』了一个function。如果系统或是函式是要求你给一个function pointer,这个function pointer指到一个实际的函式(多半这个函式是你自己写的)。然后它会在适当的时间呼叫此function,则此function就是所谓的callback function。因为这个function是被『callback』了。

举一个C的例子来说


#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#define DEFAULT_BLOCK_SIZE (4096)

// 定义callback functionprototype
typedef void (* CALLBACK) (int);

// 定义了一个名为ShowPercentage的函式。这就是我们的callback函式。
//
他的prototype必须与前面的CALLBACK宣告一致。
void ShowPercentage(int percentage)
{
    fprintf(stderr, "%d/%/n", percentage);
}

// 定义了一个CopyFile的函式,这个函式会将参数source所指定档案复制到
// target
参数所指定的档案去。而且每复制DEFAULT_BLOCK_SIZE数量的数据
//
就会呼叫一次callback参数所指到function一次。
void CopyFile(const char *source, const char *target, CALLBACK callback)
{
    char buf[DEFAULT_BLOCK_SIZE] ;
    struct stat fs ;
    int fdSrc, fdTrg ;
    int readBytes = 0, totalReadBytes = 0, percentage = 0;
    fdSrc = open(source, O_RDONLY);
    fstat(fdSrc, &fs);
    fdTrg = open(target,O_CREAT|O_TRUNC|O_RDWR);
    //
主要复制数据的循环
    while((readBytes=read(fdSrc, buf, DEFAULT_BLOCK_SIZE)) > 0)
{
        write(fdTrg, buf, readBytes);
        totalReadBytes += readBytes ;
        //
复制资料后就呼叫callback函式去做显示百分比的动作。
        callback( (totalReadBytes*100)/fs.st_size);
}
    close(fdTrg);
    close(fdSrc);
}

int main(void)
{
    //
这个范例中只是利用callback来显示目前的进度。
    //
实际上我们可以利用callback来做更多的动作。
    CopyFile("A.TXT", "B.TXT", ShowPercentage);
    return 0 ;
}

 

相关文章推荐

JavaScript callback function 理解

看到segmentfault上的这个问题 JavaScript 回调函数怎么理解,觉得大家把异步和回调的概念混淆在一起了。做了回答: 我觉得大家有点把回调(callback)和异步(asynch...

callback function 回调函数

回调函数   在看LWIP时,见到用回调函数,再看某老外公司OPC源代码时,见到用回调函数。看我国内某些代码(我公司软件等)时没用到。于是,我对回调函数产生了很大的好奇。以前,我写VC程序时用到过...

cocos2d中的function和CC_CALLBACK组合

首先我们来看一个异步加载的addImageAsync函数Director::getInstance()->getTextureCache()->addImageAsync(p, CC_CALLBACK...

平台2.4的报告“Missing callback function or metadata object”异常

打开后台的软件模块,系统前端报出“Missing callback function or metadata object ”异常,后台却没有报错,上网找了找资料,这是DWR框架的异常信息。 其中参考...
  • lejuo
  • lejuo
  • 2011年04月28日 12:41
  • 2393

理解一下回调函数Callback Function

在知乎上看到一个很好的解释用来理解回调函数的过程。 大致是说 你去宾馆了然后向前台告知明天六点叫我起床,这句话就大致说明了两个Function 1.我请求叫醒服务 2.宾馆记录下来到具体时间点...

cocos2dx 函数作为参数进行传递和调用(std::function跟CC_CALLBACK_1的使用)

本文主要实现的功能为:  把函数当做形参进行传递,并且调用。 步骤如下: 1:首先声明一个函数指针   函数原型为   void 函数名(string str) 无返回值,一个string参数 ...
  • dearsir
  • dearsir
  • 2017年02月07日 18:23
  • 843

Thinkphp中自动验证function和callback的区别

Thinkphp源码library/think/Model.class.php。从源码中可以看出,当case 'fucntion'和case 'callback'是走的同一段处理代码。但是在最后一个判...

回调函数 Callback function 的概念与程序示例

1. 专业解释:      In computer programming, a callback is a reference to executable code, or a piece of ...

玩转VC++实现CallBack

题目有点大,其实本文只是要DEMO一下用函数指针在VC++实现回调。 一、函数指针 那么什么是函数指针呢?说白了就是指向函数的指针,它是一个变量。 通常,函数会被编译为一段二进制机器码。每个函数总是占...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:转的 何謂callback function?
举报原因:
原因补充:

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