逐步实现TCP服务端Step03-3:封装CodeQueue类

CodeQueue即:code队列,一个CodeQueue实例将在一个由SharedMemory实例所维护的共享内存段上进行构造。CodeQueue依赖于SharedMemory。之前说过,SharedMemory未实现“恢复”功能,每次启动进程都会对SharedMemory对象做Init操作,即使该对象已经存在。CodeQueue依赖于SharedMemory,因此也会做类似的处理。

这里的CodeQueue主要是将目前base.h文件中所定义的CodeQueue(Ex)结构以及PushCodeBack(Ex)和PopCodeFront(Ex)等操作整合起来。

new运算符:在new一个CodeQueue对象之前,需要将创建好的共享内存对象的指针赋给CodeQueue::shared_memory_变量,它是一个SharedMemory指针。new运算符内部实际是调用了SharedMemory的CreateSegment方法在共享内存中划分出了一块CodeQueue大小的段,用来构造CodeQueue对象。

Init方法:构造函数调用了该方法,其主要任务是在SharedMemory对象对应的那块共享内存上再创建一个段做为队列的缓冲区。

工作过程演示

CodeQueue对象的创建过程: 包括了new操作和Init操作。

CodeQueue类的实现详见:codequeue.hcodequeue.cc文件,netio.ccs.cc中用到队列的部分已用CodeQueue进行替换。

原base.h文件中的一些代码已经没有存在的必要了,将这些无用的代码删除。同时,由于与消息相关的类尚未定义,所以,涉及到消息的处理部分还是要使用base.h中定义的函数,不过要做一些改动,以兼容之前定义的类。改后的DispatchMessages名为DispatchMessagesEx,ProcessOneMessageEx变为ProcessOneMessageExEx,代码详见新版base.h文件。

<==  index  ==>