⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intstructmap.cpp

📁 SMS gateway. SMS protocol for CHINA mobile, unicom, lingtong. Using mysql to exchange message.
💻 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 + -