织梦CMS - 轻松建站从此开始!

罗索

当前位置: 主页>杂项技术>VC(MFC)>

何谓callback function

罗索客 发布于 2006-11-16 14:47 点击:次 
简单的说,如果你使用了某个function,那麽你就是『call』了一个function。如果系统或是函式是要求你给一个function pointer,这个function pointer指到一个实际的函式(多半这个函式是你自己写的)。然後它会在适当的时间呼叫此function,则此function就是所谓的callbac
TAG:

简单的说,如果你使用了某个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 function的prototype。
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 ;
}

(iwgh)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/200611/6372.html]
本文出处: 作者:iwgh
顶一下
(1)
50%
踩一下
(1)
50%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容