我现在碰到一个问题,大家看看怎么解决好: 首先,我这个程序不是窗口程序。是一个客户端去取服务器的数据,再把取到的数据给主程序。
现在有两个父类,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两次?? 非常晕,新手基础不好,望大家详细指教!
现在有两个父类,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两次?? 非常晕,新手基础不好,望大家详细指教!
class CChild
{
public:
....
private:
CFather1 father1;
CFather2 father2;
}
在CFather1 和CFather2中添加CChild实例指针,当收到数据时,通过指针调用CChild的函数或传递数据。
这个子类做什么?还要父类传数据给他?不懂你想的什么...
如果你需要同步处理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];里面
...
}
}
}