问题描述
- CSocket类中OnReceive()函数被重写后,为什么还要调用CSocket::OnReceive.
-
1.CSocket类中OnReceive()函数被重写后,为什么还要调用CSocket::OnReceive.
2.被重写的Onreceive()函数什么时候会被调用,该函数中使用了Receive()方法。我没有使用定时器机制,会不会造成阻塞。感谢您的耐心解答
解决方案
(1)派生类要做的事情属于基类要做的事情再加上一些别的事情的情况,需要调用基类。派生类做的事情属于完全不同基类做的事情,不需要调用基类。
(2)这个不需要你操心,数据到达自然会调用。csocket类会调用onxxx方法,因为你重写了方法,就会调用你的虚方法。
解决方案二:
1.重写就是实现自己的业务逻辑啊
2.当socket的接收缓冲区有新数据时,OnReceive被调用。 当缓冲区空了以后,再有新数据以后,才会触发。假如你在连续的Receive,在这个过程中数据假如源源不断,是不会有OnReceive的。因此一般期望在一个WSAEWOULDBLOCK失败的Receive后,再等待onreceive
3.正确的做法是
在OnReceive事件中只能调用一次的Receive
如果调用两次,就会因为此时还没有后续数据到达导致阻塞
如果判断数据未接收完整需先将数据放在自定义的缓冲区内,然后等待下一次的OnReceive
解决方案三:
主要是你没有完全自己实现,而只是加了一部分自己逻辑。还有其他一些要依赖基类的处理。这样就对应子类只要添加自己的额外处理。而大部分公共部分都重用基类的实现。
时间: 2024-10-29 17:56:24