关闭

转的 何謂callback function?

标签: callbackfunctionprototypestructc
4207人阅读 评论(0) 收藏 举报
分类:

何谓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 ;
}

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:165840次
    • 积分:2643
    • 等级:
    • 排名:第13754名
    • 原创:73篇
    • 转载:24篇
    • 译文:0篇
    • 评论:226条
    最新评论