我现在碰到一个问题,大家看看怎么解决好: 首先,我这个程序不是窗口程序。是一个客户端去取服务器的数据,再把取到的数据给主程序。 
现在有两个父类,CFather1, CFather2. 
这两个类都继承了CAsyncSocket 
分别在CFather1和CFather2里重载CAsyncSocket::OnConnect和CAsyncSocket::OnRecevie函数 
class CFather1: public CAsyncSocket 

public: 
  virtual void OnConnect( int nErrorCode ); 
  virtual void OnReceive( int nErrorCode ); 

class CFather2: public CAsyncSocket 

public: 
  virtual void OnConnect( int nErrorCode ); 
  virtual void OnReceive( int nErrorCode ); 

CFather1要connect到port1端口拿数据,CFather1要connect到port2端口拿数据,IP一样的。 
现在有一个子类CChild同时继承CFather1和CFather2。 因为我要在CChild里把从CFather1和CFather2拿到的数据统一做处理后再传给主程序。 我的目的是要在CChild类中获得CFather1和CFather2接收到的数据,用什么方法比较好呢? 
能不能直接在CChild类中接收数据呢?如果分别在在CFather1和CFather2里接收数据我怎么在CChild里得到数据做统一处理? 现在的问题是如果我在CChild里: 
class CChild: public CFather1, public CFather2 

public: 
.... 
private: 
CFather1 father1; 
CFather2 father2; 
} 这样实例化的话, 
father1.create() //建立socket 
father1.connect(ip,port); 
father1.send(data); 
然后会在father1的OnRecevice里得到数据,因为不是窗口程序,数据没什么好办法通知给CChild 
如果在CChild里重载OnRecevice的话,我怎么知道是重载了哪个父类的方法,两个名字、参数都一样的,而且我是不是要connect两次?? 非常晕,新手基础不好,望大家详细指教! 

解决方案 »

  1.   


    class CChild

    public: 
    .... 
    private: 
    CFather1 father1; 
    CFather2 father2; 

    在CFather1 和CFather2中添加CChild实例指针,当收到数据时,通过指针调用CChild的函数或传递数据。
      

  2.   

    我很奇怪,你不是father1.create() 了吗?怎么又需要CChild
    这个子类做什么?还要父类传数据给他?不懂你想的什么...
      

  3.   

    晕了,晕了Father1/Father2;Monther1/Mother2;/Child1/Child2...
      

  4.   

    你这个不是一个child类同时继承father1、father2的问题;
    如果你需要同步处理socket1(port1)和socket2(port2)的数据,
    其实继承自CAsyncSocket的类一个足够了,实例化时,给一个不同的port
    你应该用到的是线程同步的问题,而不是搞一个大杂烩的火锅。CFather  f1(port1);
    CFather  f2(port2);UINT WorkerThread(LPVOID lParam)
    {
       HANDLE evts[2];
       evts[0] = f1.recv_event;
       evts[1] = f2.recv_event;  int nRet =  WaitForMultipleObjects(evts, 2, FALSE, INFINITE);
      if(nRet == WAIT_OBJECT_O)
      {
        // 等到了第一个port1的数据,下面等待第二个port的数据
         nRet = WaitForSingleObject(evts[1], INFINITE);
        if(nRet == WAIT_OBJECT_0)
        {
          // 等到了第二个port2的数据,这里统一处理
           // OnReceive的数据放在:CFatehr::m_szBuffer[1024];里面
           ...
        }     
      }
    }