Chinaunix首页 | 论坛 | 博客
  • 博客访问: 458712
  • 博文数量: 113
  • 博客积分: 446
  • 博客等级: 下士
  • 技术积分: 1229
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-09 16:01
个人简介

Let's go!!!!!

文章分类

全部博文(113)

文章存档

2019年(5)

2018年(4)

2017年(9)

2016年(5)

2015年(39)

2014年(6)

2013年(28)

2012年(17)

分类: LINUX

2015-07-16 23:05:33

如果参数是一个函数指针,调用者可以传递一个函数的地址给实现者,让实现者去调用它,这称为回调函数。

回调函数示例:void func(void (*f)(void *), void *p);

调用者

实现者

  1. 提供一个回调函数,再提供一个准备传给回调函数的参数。
  2. 把回调函数传给参数f,把准备传给回调函数的参数按void *类型传给参数p
  1. 在适当的时候根据调用者传来的函数指针f调用回调函数,将调用者传来的参数p转交给回调函数,即调用f(p);

以下是一个简单的例子。实现了一个repeat_three_times函数,可以把调用者传来的任何回调函数连续执行三次。

#include <stdio.h>

typedef void (*callback_t)(void *);

void say_hello(void *str)

{

     printf("Hello %s\n", (const char *)str);

}

void count_numbers(void *num)

{

    int i = 0;

    for(i=1; i<=(int)num; i++)

           printf("%d ", i);

    putchar('\n');

}

void repeat_three_times(callback_t f, void *para)

{

     f(para);

     f(para);

     f(para);

}

int main(void)

{

     repeat_three_times(say_hello, "Guys");

     repeat_three_times(count_numbers, (void *)4);

     return 0;

}

阅读(988) | 评论(0) | 转发(0) |
0

上一篇:pthread_detach

下一篇:通知链

给主人留下些什么吧!~~