CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

回掉函数

楼主jinke1983(45616546)2006-03-01 14:43:58 在 C/C++ / C++ 语言 提问

int   A(char   *p);   //   回调函数    
  typedef   int(*CallBack)(char   *p)   ;   //   声明CallBack   类型的函数指针    
  CallBack   myCallBack   ;   //   声明函数指针变量  
  myCallBack   =   A;   //   得到了函数A的地址      
   
  //   --------------   使用例子   -------------  
  char   *p   =   "hello!";  
  CallBack   myCallBack   ;    
  myCallBack   =   A   ;  
  B(A,   p);  
  ////////////////////////////////////  
  既然B(A,   p);只用到A,为什么还要  
  typedef   int(*CallBack)(char   *p)   ;   //   声明CallBack   类型的函数指针    
  CallBack   myCallBack   ;   //   声明函数指针变量  
  myCallBack   =   A;   //   得到了函数A的地址      
  程序都没用到?????????????? 问题点数:20、回复次数:14Top

1 楼piaochen_2002(执子之手,与子偕老!)回复于 2006-03-01 14:47:14 得分 0

好象是没有什么用!Top

2 楼jinke1983(45616546)回复于 2006-03-01 14:49:56 得分 0

我觉得应该是B(myCallBack,p);比较好Top

3 楼jinke1983(45616546)回复于 2006-03-01 15:13:32 得分 0

继续求助Top

4 楼jinke1983(45616546)回复于 2006-03-01 15:16:50 得分 0

是不是  
  B(A,   p);  
  B(myCallBack,p);  
  一样的啊?Top

5 楼zenny_chen(ACE Intercessor)回复于 2006-03-01 21:25:37 得分 0

回调函数一般是由系统提供的。比如一个定时中断处理函数。  
   
  由于用户无法去捕捉定时中断,因此无法直接去处理定时中断。  
   
  这时可以利用回调机制:  
   
  int   SetTimer(unsigned   int   (*userEntry)(void*   pParam),   void   *pParam,   unsigned   long   suspendTime)  
  {  
          //   系统处理部分(对定时器进行初始化)  
          _set_time_init_count(suspendTime);         //   设置初始定时值  
          unsigned   int   hTimer   =   (*userEntry)(pParam);  
          //   做其他事  
          return   hTimer;  
  }  
   
   
  unsigned   int   TimerISR(void   *pParam)  
  {  
          printf("An   timer   interrupt   occurred!\n");  
           
          return   1;  
  }  
   
  void   main()  
  {  
          SetTimer(&TimerISR,   NULL,   500);       //   定时500毫秒  
          while(1);  
  }  
   
  SetTimer函数将会把用户定义的TimerISR注册在中断向量中,并且将携带的参数pParam存入TimerISR在系统态时可访问的地方。这样当500毫秒过后,用户定义的TimerISR将被启动。Top

6 楼lei001(太极)回复于 2006-03-02 00:42:35 得分 0

用户也是可以定义回调函数的,lz举的就是一个例子  
  char   *p   =   "hello!";  
  CallBack   myCallBack   ;    
  myCallBack   =   A   ;  
  B(A,   p);  
   
  B从什么地方来?看不懂的,能否举的例子详细点,另外根据你的例子,稍做一点修改:  
  #include<iostream>  
  using   namespace   std;  
   
  void   A(char   *p);   //   回调函数    
  typedef   void(*CallBack)(char   *p)   ;   //   声明CallBack   类型的函数指针    
   
  void   A(char   *p)  
  {  
    cout<<p;  
  }  
   
  void   main()  
  {  
  //   --------------   使用例子   -------------  
  char   *p   =   "hello!";  
  CallBack   myCallBack   ;    
  //myCallBack(p);//出错的  
  myCallBack   =   A   ;  
   
  A(p);  
  myCallBack(p);//同A(p);  
   
  }  
   
   
  Top

7 楼window09()回复于 2006-03-02 01:35:00 得分 0

从LZ给的代码看,那样写确实没什么用  
   
  注意:CallBack       CALLBACK   之间不同Top

8 楼yameng(雅梦)回复于 2006-03-02 09:03:39 得分 0

是可以不用啊,这样写我觉得主要是为了看代码时方便吧。不过我没看出来你的代码中用的是回调函数,从你定义的函数指针来看,A函数并不是一个回调函数啊  
   
  另外CALLBACK只是一个调用方式声明,不一定非得由系统调用,自已的程序完全可以调用。Top

9 楼jinke1983(45616546)回复于 2006-03-02 09:13:11 得分 0

B是调用者!  
  疑问:  
  1:SetTimer(&TimerISR,   NULL,   500);       //   定时500毫秒  
  TimerISR本身就是地址啊,为什么还要加&?  
  2:  
  A(p);  
  myCallBack(p);//同A(p);  
  这个我知道,我想知道  
  B(A,   p);  
  B(myCallBack,p);  
  是不是一样?Top

10 楼jinke1983(45616546)回复于 2006-03-02 09:32:12 得分 0

顶Top

11 楼Wolf0403(废人:独活十年~心如刀割)回复于 2006-03-02 09:33:03 得分 0

写范例程序的人忘记了。。。Top

12 楼jinke1983(45616546)回复于 2006-03-02 10:29:35 得分 0

写范例程序的人忘记了。。。???????????????????????????????????????????Top

13 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-02 10:36:10 得分 0

是有点莫名其妙啊,  
  这是谁的代码?    
  说不定写代码的人神游去了呢Top

14 楼lei001(太极)回复于 2006-03-02 22:45:56 得分 0

我想应该是一样的  
  Top

相关问题

  • 如何卸掉Windows钩函数?
  • 谁教懂我 回掉函数??
  • 求去掉html标记的函数
  • c++中的函数掉用问题
  • 回掉函数的参数的传递?
  • 关于析构函数的掉用
  • 函数
  • 函数
  • 函数?
  • 函数

关键词

  • 函数
  • 指针
  • 中断
  • 用户
  • 系统
  • mycallback
  • timerisr
  • callback
  • pparam
  • 例子

得分解答快速导航

  • 帖主:jinke1983

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo