📄 intstructmap.cpp
字号:
/**********************************************************************
FileName : IntStructMap.cpp
Description : 整数-结构体哈希映射类
Version : 1.0
Date : 2003年7月1日
Author : 刘荣辉
Other : 支持多线程的Map类,作为已发送队列(哈希表)
***********************************************************************/
#include "../include/IntStructMap.h"
//=====================构造函数===============================
CIntStructMap::CIntStructMap()
{
MaxSize = 331;
}
//======================析构函数==============================
CIntStructMap::~CIntStructMap()
{
sem_destroy(&WriteSem);
sem_destroy(&AddLock);
sem_destroy(&DelLock);
}
//======================初始化==============================
void CIntStructMap::Map_Init(int size)
{
MaxSize = size;
sem_init(&WriteSem, 0, size); //窗口大小初始化
sem_init(&AddLock, 0, 1);
sem_init(&DelLock, 0, 1);
}
//======================增加节点==============================
bool CIntStructMap::Add(unsigned int Sequence, SendQUnit SUnit)
{
if(sem_trywait(&WriteSem)!=0) //窗口已满
{
return false;
}
//sem_wait(&WriteSem); //等待占用一个空闲窗口
sem_wait(&AddLock); //防止多个线程同时插入队列单元
//SendQUnit *Unit = new SendQUnit;
//printf("\n ==============================================================Add: Sequence=[%d],unit=[%d],*unit=[%d]\n",Sequence,Unit,*Unit);
//*Unit = SUnit; //复制存储
//SentQ[Sequence] = *Unit;
SentQ[Sequence] = SUnit;
sem_post(&AddLock);
return true;
}
//======================删除某个队列单元==============================
int CIntStructMap::Delete(unsigned int Sequence)
{
int DelNum;
sem_wait(&DelLock);
DelNum = SentQ.erase(Sequence);
sem_post(&DelLock);
return DelNum;
}
//===============删除某队列单元并释放其中的包指针所指内存
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -