LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1042|回复: 8

请问哪里可以知道有关回调函数的详细介绍?

[复制链接]
发表于 2007-4-4 14:31:26 | 显示全部楼层 |阅读模式
我用google搜索了很久都没有找到一个很详细的介绍。特别是对于回调函数的参数的处理的问题,一直没找到有关的内容。烦请各位高手指点迷津。。。。。
发表于 2007-4-4 15:20:42 | 显示全部楼层
不就是函数指针吗?还有什么特别的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-4 15:36:20 | 显示全部楼层
Post by pupilzeng
不就是函数指针吗?还有什么特别的?



我知道是函数指针,请问该函数的参数怎么传递给调用它的函数的?
回复 支持 反对

使用道具 举报

发表于 2007-4-5 07:36:16 | 显示全部楼层
Post by hhshr825
我知道是函数指针,请问该函数的参数怎么传递给调用它的函数的?


一种可能的情况是: 函数A的第一个参数是接收一个回调函数B,第二个参数是要传给B的参数。
回复 支持 反对

使用道具 举报

发表于 2007-4-5 07:37:25 | 显示全部楼层
更多时候callback函数是没有参数的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-6 13:03:15 | 显示全部楼层
若callback函数有好几个参数呢?而且被调用的时候都没有显示的给参数赋值,请问这该怎么理解?
回复 支持 反对

使用道具 举报

发表于 2007-4-6 14:08:35 | 显示全部楼层
Post by hhshr825
若callback函数有好几个参数呢?而且被调用的时候都没有显示的给参数赋值,请问这该怎么理解?

给出代码的话,会更能说明问题的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-9 14:47:58 | 显示全部楼层

  1. void Callback(EVT_CallReason_t Reason,
  2.                  const DeviceName_t RegistrantName,
  3.                  EVT_EventConstant_t Event,
  4.                  const void *EventData,
  5.                  const void *SubscriberData_p)
  6. {
  7.     switch (Event)
  8.     {
  9.         /* A infrared command has been transmitted or received */
  10.         case READ_DONE_EVT:
  11.         case WRITE_DONE_EVT:
  12.             LastEvent = Event;
  13.             LastError = ((EvtReadDoneParams_t *)EventData)->Result;
  14.             /* signal the semaphore */
  15.             semaphore_signal(&Semaphore_t);
  16.             break;
  17.         default:
  18.             break;
  19.     }
  20. }
复制代码



  1. typedef void (*EVT_DeviceCallbackProc_t)(
  2.     EVT_CallReason_t Reason,
  3.     const DeviceName_t RegistrantName,
  4.     EVT_EventConstant_t Event,
  5.     const void *EventData,
  6.     const void *SubscriberData_p
  7. );

  8. typedef struct EVT_DeviceSubscribeParams_s
  9. {
  10.     EVT_DeviceCallbackProc_t NotifyCallback;
  11.     void *SubscriberData_p;
  12. } EVT_DeviceSubscribeParams_t;

  13. int caller_t(void)
  14. {
  15.            EVT_DeviceSubscribeParams_t EvtSubParams;

  16.             memset(&EvtSubParams, 0, sizeof(EvtSubParams));
  17.             EvtSubParams.NotifyCallback = BLASTER_Callback;

  18.             error = STEVT_SubscribeDeviceEvent(EVTHndl[0],
  19.                                     BlasterDeviceName[RX],
  20.                                     STBLAST_READ_DONE_EVT,
  21.                                     &EvtSubParams);
  22. .
  23. .
  24. .
  25. }
复制代码


这里并没有给回调函数传递参数,没看到显示的传递。。。
请问怎么解释??

谢谢!
回复 支持 反对

使用道具 举报

发表于 2007-4-10 10:40:41 | 显示全部楼层
Post by hhshr825

  1. void Callback(EVT_CallReason_t Reason,
  2.                  const DeviceName_t RegistrantName,
  3.                  EVT_EventConstant_t Event,
  4.                  const void *EventData,
  5.                  const void *SubscriberData_p)
  6. {
  7.     switch (Event)
  8.     {
  9.         /* A infrared command has been transmitted or received */
  10.         case READ_DONE_EVT:
  11.         case WRITE_DONE_EVT:
  12.             LastEvent = Event;
  13.             LastError = ((EvtReadDoneParams_t *)EventData)->Result;
  14.             /* signal the semaphore */
  15.             semaphore_signal(&Semaphore_t);
  16.             break;
  17.         default:
  18.             break;
  19.     }
  20. }
复制代码



  1. typedef void (*EVT_DeviceCallbackProc_t)(
  2.     EVT_CallReason_t Reason,
  3.     const DeviceName_t RegistrantName,
  4.     EVT_EventConstant_t Event,
  5.     const void *EventData,
  6.     const void *SubscriberData_p
  7. );

  8. typedef struct EVT_DeviceSubscribeParams_s
  9. {
  10.     EVT_DeviceCallbackProc_t NotifyCallback;
  11.     void *SubscriberData_p;
  12. } EVT_DeviceSubscribeParams_t;

  13. int caller_t(void)
  14. {
  15.            EVT_DeviceSubscribeParams_t EvtSubParams;

  16.             memset(&EvtSubParams, 0, sizeof(EvtSubParams));
  17.             EvtSubParams.NotifyCallback = BLASTER_Callback;

  18.             error = STEVT_SubscribeDeviceEvent(EVTHndl[0],
  19.                                     BlasterDeviceName[RX],
  20.                                     STBLAST_READ_DONE_EVT,
  21.                                     &EvtSubParams);
  22. .
  23. .
  24. .
  25. }
复制代码


这里并没有给回调函数传递参数,没看到显示的传递。。。
请问怎么解释??

谢谢!


哪个地方有回调函数的调用?看到有这么一句:vtSubParams.NotifyCallback = BLASTER_Callback;可这只是设置,而非调用。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表