现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

建立自己的Callback机制

2012-11-25 07:04 工业·编程 ⁄ 共 1119字 ⁄ 字号 评论 1 条

    其实callback并不仅限于系统调用,用户根据需要,可以建立自己的Callback机制。比如网络通讯,当接收线程(可能专门有一个类封装网络接收行为)收到数据包,需要通知上层(可能又有一个类封装上层数据处理).

    那么我认为Callback最本质的特征包括两点:注册和触发。实现可以是各种各样的形式,但机制都是如此。比如对于两个类而言,给出以下示例代码: 

  #include   <iostream.h>  
  class   B    
  {  
  public:  
  B();  
  void   OnGetMsg(unsigned   long   ID,const   char   *     MsgName);  
  private:  
  unsigned   long       m_ID;  
  };  
  B::B()  
  {  
  m_ID   =   1002;  
  }  
  void   B::OnGetMsg(unsigned   long   ID,   const   char   *MsgName)  
  {  
  cout   <<   "srcObjID   =   "   <<   ID   <<   ",   "   <<   "tgtObjID   =   "   <<   m_ID   <<",   "   <<"Message:   "   <<   MsgName   <<   endl;  
  }  
  class   A    
  {  
  public:  
  A();  
  void   RegisterMsg(B*   pb);  
  void   SendMsg(char*   msg);  
  private:  
  B   *   m_pb;  
  unsigned   long   m_ID;  
  };  
  A::A()  
  {  
  m_ID   =   1001;  
  m_pb   =   NULL;  
  }  
  void   A::RegisterMsg(B*   pb)  
  {  
  m_pb     =   pb;  
  }  
  void   A::SendMsg(char   *msg)  
  {  
  if(m_pb   !=   NULL)  
  m_pb->OnGetMsg(m_ID,msg);  
  }  
  void   main()  
  {  
        //产生回调的类对象a  
        A   a;  
        //相应回调的类对象b  
        B   b;  
      //A类对象注册  
      a.RegisterMsg(&b);  
      //A类对象触发、B类对象响应  
      a.SendMsg("i'm   callback   function");  
  } 

目前有 1 条留言    访客:0 条, 博主:0 条 ,引用: 1 条

    外部的引用: 1 条

    • 回调函数callback理解与实现 « 求索阁

    给我留言

    留言无头像?