📄 msgqueue.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 + -