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

📄 msgqueue.h

📁 这个程序包里有3个部分:直播服务器
💻 H
字号:
#if !defined(WEIL_MSGQUEUE_H)
#define WEIL_MSGQUEUE_H

#define MAX_MSG_NUMBER	8192
#define SLEEP_TIME		10

class MsgQueue
{
protected:
	struct MSG_QUEUE{
		unsigned long DataHead;		//消息队列头指针
		unsigned long DataTail;		//消息队列尾指针
		unsigned long IndexHead;	//数据索引头指针
		unsigned long IndexTail;	//数据索引尾指针
		unsigned long Index[MAX_MSG_NUMBER][2];	//数据指针数据
		unsigned long AttachCount;	//连接个数
		unsigned long MQSize;		//消息队列的大小
	}*Data; 
	char			  *szBuf;		//消息队列
	HANDLE			  FileMappingHandle;
	HANDLE			  hSemaForPut;	//消息队列互斥写信号灯
	HANDLE		      hSemaForGet;	//消息队列互斥读信号灯

public:		
	BOOL	          ifBlock;		//阻塞标志,默认值为TRUE
	BOOL			  bExitFlag;	//退出标志

protected:
	DWORD P(HANDLE hSema);
	BOOL  V(HANDLE hSema);

public:
	MsgQueue();
	~MsgQueue();
	int	Create(char *MsgQueueName,unsigned long MsgQueueSize);	//建立消息队列,创建成功返回0,创建不成功也返回-1(同一个队列只能创建一次)
	int Open(char *MsgQueueName);								//打开消息队列,打开成功返回0,不成功则返回-1
	int Close();												//关闭,在使用完消息队列后要关闭(关闭操作只是解除影射关系而不是删除消息队列)
	int Destory(char *MsgQueueName);							//删除消息队列,成功删除返回0,不成功则返回-1(目前还未实现Becuase I don't konw how to do that)
	int Init();													//置头尾指针为0(创建消息队列时已经把头尾指针设置为0)
	int GetMsg(char *Buffer);									//从消息队列中取出一条消息,若返回0则没有消息,返回-1表示函数调用失败,其他为消息的字节数;若ifBlock为TRUE,若消息队列为空则睡眠等待消息,若ifBlock为FALSE,若消息队列为空则立即返回(返回值为0)
	int PutMsg(char *Buffer,unsigned long MsgLength);			//把一条消息放到消息队列中,若返回0则成功,-1为失败;若ifBlock为TRUE,若消息队列满则睡眠等待直到把该消息放到消息队列中才返回,若ifBlock为FALSE,若消息队列满则立即返回(返回值为-1)
	int ClsQueue();
}
;
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -