Chinaunix首页 | 论坛 | 博客
  • 博客访问: 400154
  • 博文数量: 101
  • 博客积分: 2247
  • 博客等级: 大尉
  • 技术积分: 979
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-15 22:39
文章分类

全部博文(101)

文章存档

2012年(1)

2011年(100)

分类: C/C++

2011-06-18 16:25:32

在实际系统中,异步调用也是回调函数的一种典型用法,调用者首先将回调函数传给实现者,实现者记住这个函数,这称为注册一个回调函数,然后当某个事件发生时实现者再调用先前注册的函数,比如sigaction(2)注册一个信号处理函数,当信号产生时由系统调用该函数进行处理,再比如pthread_create(3)注册一个线程函数,当发生调度时系统切换到新注册的线程函数中运行,在GUI编程中异步回调函数更是有普遍的应用,例如为某个按钮注册一个回调函数,当用户点击按钮时调用它。

/* para_callback.h */
#ifndef PARA_CALLBACK_H
#define PARA_CALLBACK_H
typedef void (*callback_t)(void *);
extern void repeat_three_times(callback_t, void *);
#endif

----------------------------------------------------------------------
/* para_callback.c */
#include "para_callback.h"

//实现者,根据时机再调用回调函数
void repeat_three_times(callback_t f, void *para)
{
     f(para);
     f(para);
     f(para);
}
----------------------------------------------------------------------
/* main.c */
#include
#include "para_callback.h"

void say_hello(void *str) //回调函数
{
     printf("Hello %s\n", (const char *)str);
}

void count_numbers(void *num)//回调函数
{
     int i;
     for(i=1; i<=(int)num; i++)
 printf("%d ", i);
     putchar('\n');
}

int main(void)
{
repeat_three_times(say_hello, "Guys");
//调用者,也叫注册一个回调函数,是异步的
     repeat_three_times(count_numbers, (void *)4);
     return 0;
}
阅读(970) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~