转的 何謂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 ;
}

 

何謂 Raw Data ?

http://zip.nvp.com.tw/forum.php?mod=viewthread&tid=2864&extra=page%3D3 將點陣類型的數位影像個別像素的值加以...
  • rocky69
  • rocky69
  • 2012年09月18日 06:31
  • 745

JavaScript callback function 理解

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

何謂 Device Discovery

http://zip.nvp.com.tw/forum.php?mod=viewthread&tid=249&extra=page%3D6 Device Discovery:定義 GigE 相機...
  • rocky69
  • rocky69
  • 2012年09月14日 07:51
  • 572

何謂 GVCP

http://zip.nvp.com.tw/forum.php?mod=viewthread&tid=240&extra=page%3D7 GVCP(GigE Vision Control Prot...
  • rocky69
  • rocky69
  • 2012年09月14日 07:54
  • 1004

何謂 Keyword-Driven Testing?

原文出处:http://blog.joycode.com/oldsidney/articles/23580.aspx Mercury 新發表的 QuickTest Professional 8.0,又...
  • jackei
  • jackei
  • 2005年04月12日 12:29
  • 277

何謂天才?

就是放對地方的人才;反過來說,你眼中的蠢材,很可能也只是放錯地方的人才。例如:你和一位土著被困在非洲叢林,既無食物,也無水喝,那麼你將把這位土著當作「天才」,因為他懂得各種求生的技巧。相反地,如果把他...
  • hbh1
  • hbh1
  • 2005年08月22日 17:47
  • 485

[好文章]何謂天才?

就是放對地方的人才;反過來說,你眼中的蠢材,很可能也只是放錯地方的人才。例如:你和一位土著被困在非洲叢林,既無食物,也無水喝,那麼你將把這位土著當作「天才」,因為他懂得各種求生的技巧。相反地,如果把他...
  • hbh1
  • hbh1
  • 2005年08月23日 02:38
  • 572

何謂 Syslogd

Syslogd的運作流程  為了能讓系統管理人員,清楚掌握系統的運作狀況,大多數的作業系統都會有日誌(Log)的功能,在 RHEL 3.0 系統中是由 sysklogd-1.4.1-12.i38...
  • yjz0065
  • yjz0065
  • 2008年09月24日 18:06
  • 665

extjs ajax callback:function(options,success,response)中几个参数的含义

var projectID=session.projectID; var projectName=session.projectName; var conn = new Ext.d...
  • yzn77
  • yzn77
  • 2017年03月16日 10:34
  • 565

JavaScript学习笔记(十二) 回调模式(Callback Pattern)

函数就是对象,所以他们可以作为一个参数传递给其它函数; 当你将introduceBugs()作为一个参数传递给writeCode(),然后在某个时间点,writeCode()有可能执行(调用)intr...
  • qq838419230
  • qq838419230
  • 2012年09月27日 23:20
  • 11213
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:转的 何謂callback function?
举报原因:
原因补充:

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