网络编程中遇到的问题,程序可以使用,但有几点不明白:CMySocket从CAsyncSocket类继承CMyDialog是我的基于对话框的MFC工程的主类:
我在CMyDialog中声明两个成员变量
CMySocket m_ListenServer,m_Connection;
问?
我在CMySocket中重载了虚函数OnClose
CMyDialog dlg;
viod CMySocket::OnClose(nErrorCode)
{
dlg.OnClose();
//CAsyncSocket::OnClose();
}这样在我点CMyDialog的对话框关闭按钮响应函数OnClose时,
我在CMySocket中设断点并没有直接进入CMyDialog::OnClose()中
而是先调用了CAsyncSocket::OnClose();他不是明明被我注解掉了吗?
为什么还有呢,还有 CMySocket::OnClose(nErrorCode)什么时间会被调用呢?我是觉的应该会出现递归调用现象,却没有出现
dlg.Onclose->CMysocket.Onclose()->dlg.Onclose()你们说呢
我在CMyDialog中声明两个成员变量
CMySocket m_ListenServer,m_Connection;
问?
我在CMySocket中重载了虚函数OnClose
CMyDialog dlg;
viod CMySocket::OnClose(nErrorCode)
{
dlg.OnClose();
//CAsyncSocket::OnClose();
}这样在我点CMyDialog的对话框关闭按钮响应函数OnClose时,
我在CMySocket中设断点并没有直接进入CMyDialog::OnClose()中
而是先调用了CAsyncSocket::OnClose();他不是明明被我注解掉了吗?
为什么还有呢,还有 CMySocket::OnClose(nErrorCode)什么时间会被调用呢?我是觉的应该会出现递归调用现象,却没有出现
dlg.Onclose->CMysocket.Onclose()->dlg.Onclose()你们说呢
要是这样的话,你调用用m_ListenServer或m_Connection的Close()很窗口是不是就关了呢?
即在点对话框关闭时
CDialogServer::Onclose()
{
m_ListenServer.Close();
}
而在MySocket::Oncluse()
{
dlg.Onclose()
}是不是一个递归?
而且我在m_listenServer.close()时设断点跟进去,他执行的是CAsyncSocket::OnClose();
为什么?我不是重载了这个虚函数吗,而且我把他调用基类的部分注解了呀,
那我派生类中的MySocket::oncluse又是什么时间调用呢
既然CMyDialog是我的基于对话框的MFC工程的主类,系统自然会有一个默认实例,搂主为什么还要声明CMyDialog dlg;然后再Socket类的关闭中关闭呢?这样根本不会影响到主对话框的。另外,出现以上现象可能是这样的原因,当关闭程序的时候,系统会自动释放CMyDialog的所有成员函数,也就是会调用类中成员变量(实例)的析构函数,如果该实例没有被关闭的话,则自动调用该实例的Close方法。也就是这样执行,CMyDialog.Close()->CMySocket.~CMySocket()->CMySocket.Close()不知道你明白我的意思了吗?