csocket-CSocket类中OnReceive()函数被重写后,为什么还要调用CSocket::OnReceive.

问题描述

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

csocket-CSocket类中OnReceive()函数被重写后,为什么还要调用CSocket::OnReceive.的相关文章

java 某个类的几个对象,这些对象调用类中一个函数,是各自拥有自己的函数代码还是使用同一段代码?

问题描述 1.java 某个类的几个对象,这些对象调用类中一个函数(普通的函数),是各自拥有自己的函数代码还是使用同一段代码?2.java 继承中,子类从父类得到一些普通函数,这些函数的代码,是子类自己独自拥有一份还是和父类使用同一段函数代码.3.第一次发帖,积分什么的不会搞,貌似自己也没有积分,呵呵,大家包涵! 解决方案 引用1.java 某个类的几个对象,这些对象调用类中一个函数(普通的函数),是各自拥有自己的函数代码还是使用同一段代码?这几个对象调用的当然是同一段代码了.jvm中有一个ja

java中为什么只进行一个初始化就会执行类中的函数

问题描述 java中为什么只进行一个初始化就会执行类中的函数 import java.awt.*;import javax.swing.*;import java.awt.event.*;public class E2 extends Frame{ class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent we) {System.exit(0); } } E2() { super(""

mysql-makefile编译不能检测到头文件类中的函数修改

问题描述 makefile编译不能检测到头文件类中的函数修改 很奇怪的问题,我写了一个测试程序,用makefile进行编译,但如果我在头文件里声明了新的函数,在.cpp文件中定义这个函数,make时会提示我----错误:成员函数'int mysql_soci_test::sum()'未在类'mysql_soci_test'中声明--这个错误,但如果我不用makefile编译,用g++直接编译,就不会有问题. 下面是我的g++语句:g++ mysql_soci_test.h mysql_soci_

c# com组件-求助c#写com组件有毒 看了无数文章也无法公开一个类中的函数

问题描述 求助c#写com组件有毒 看了无数文章也无法公开一个类中的函数 看了无数文章和博客尝试了无数方法依然无法解决这个问题 编译的com组件永远只有 _object 下的的几个函数自定义的函数一个也没有 下面是看着无数文章写的代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Run

成员函数-c++中关于类中的函数一些疑问

问题描述 c++中关于类中的函数一些疑问 1.网上看见两种说法,一个是函数放在code area 另一个是instruction area 请问两者一样吗,还是有什么区别 2.创建的对象中是不是有一个指针指向放在那个area的函数,那么函数在那个区域又是怎么存放的呢 3.使用拷贝构造函数的时候,怎么把成员函数拷贝过去,构造函数也要拷贝过去吗 4.创建对象用的是构造函数,那么对象创建好了之后,对象所在的内存中还有构造函数吗(就是说对象还可以使用够早函数吗) 5.还有我想知道,类的域 就是四个点,在

类中const函数的返回值问题

问题描述 类中const函数的返回值问题 我写了一个matrix类,其中定义了一个二维指针int **p用来表示这个矩阵,现在我需要些一个下标操作符的重载,但是他会报错. const int *&matrix::operator const { return p[n]; } 这个函数返回一个一维指针引用.但是我不知道错在哪儿了. 但是如果把返回引用改成返回一维指针本身,也就是如下所示,就没问题了.为什么呢??哪个大神来解释下. const int *matrix::operator const

C#中,用类定义类中的函数,不知道怎么理解?

问题描述 C#中,用类定义类中的函数,不知道怎么理解? using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Complex z1 = new Complex

有一个类中的函数是protected的,我需要在另外一个类中调用这个函数如何实现

问题描述 有一个类中的函数是protected的,我需要在另外一个类中调用这个函数如何实现 一个类中的函数的修饰符为protected protected: BOOL RegisterWindowClass(); LRESULT SendMessageToParent(int nRow, int nCol, int nMessage); BOOL InvalidateCellRect(const CCellID& cell); 我需要在另外一个对话框类中访问这个类,请问如何实现谢谢了.

类 函数指针 c++-关于类中使用函数指针的疑问

问题描述 关于类中使用函数指针的疑问 class A { typedef int (*fun)(void); public: void Test(fun fun1) { (*fun1)(); }; static int add(void) { std::cout<<"A::add()"<<std::endl; return 2; } }; 我把typedef int (*fun)(void);这句话放在最下面的时候,会出现未声明的错误,记得如果是其他变量放在最下