📄 intstructmap.h
字号:
/********************************************************************** FileName : IntStructMap.h Description : 整数-指针哈希映射类头文件 Version : 1.0 Date : 2003年7月1日 Author : 刘荣辉 Other : 支持多线程的Map类,作为已发送队列(哈希表)***********************************************************************/#ifndef _IntStructMap_H_#define _IntStructMap_H_#include <map.h> //STL的哈希映射类#include <semaphore.h>#include <stdio.h>typedef struct _SendQUnit //发送队列单元结构体 { time_t SrcRecvTime; //原始请求包接收时间 int SrcNode; //源节点编号 //unsigned int SrcSequence; //原始请求包的流水号,若非转发包则填0 char ID_Relate[10]; //关联的Msg_ID(以二进制方式存储) time_t SendTime; //相当于long,4个字节,下一次被发送的时间(本次发送时间加超时等待时间) char iResent; //可发送次数,为-1表示为应答包(不需等应答,发送成功便不重发) //iResent=0,而且应答超时的时候,便从已发送队列中删除,并释放内存 //char Protocol; //待发包协议类型,0,CMPP; 1,SMGP; 2,SMPP int RelayTimes; //已经尝试转发的次数(每次尝试都将iResent置为最大可发送次数) char *Pack; //待发送包指针 }SendQUnit;typedef map<unsigned int , SendQUnit> IntStructMap;//=======================类定义===========================class CIntStructMap{ public: CIntStructMap(); ~CIntStructMap(); void Map_Init(int size); //初始化窗口大小 bool Add(unsigned int , SendQUnit); //在队列中插入节点 int Delete(unsigned int); //删除某个队列单元 int GetAllNode(SendQUnit *Nodes, int MaxNum); //获取最多MaxNum个节点 bool FindDel(unsigned int , SendQUnit *); //获得某个节点后删除它 bool CIntStructMap::Clean(unsigned int); //删除某队列单元并释放其中的包指针所指内存 int GetSize(); //获取队列当前大小 int GetMaxSize(); //获取队列最大容量 bool IsFull(); //判断是否窗口已满 bool IsEmpty(); //判断是否窗口为空 private: IntStructMap SentQ; //哈希表 int MaxSize; //窗口大小(表大小) sem_t WriteSem; //窗口信号量,不允许超过窗口大小 sem_t AddLock, DelLock; //增,删锁,防止同时多个线程执行增或者同时执行删操作 };#endif //_IntStructMap_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -