消息队列改写

Windows消息队列管理

根据 博客园博主+石头+的原始代码,我修改为利用std::queue管理的消息队列:

#include <iostream>
#include <Windows.h>
#include<queue>

using namespace std;

const int MAXMESSAGE = 1024;

class CXMessageList
{
public:
	CXMessageList();
	~CXMessageList(){};
public:
	MSG* GetTopMessage();
	MSG* WaitForMessage();
	int GetMessageCount(){return m_MsgList.size();};
	int InsertMessage(MSG *msg);
private:
	queue<MSG*> m_MsgList;
	HANDLE mCS_Message;
};
int CXMessageList::InsertMessage( MSG *msg )
{
	if(GetMessageCount()>MAXMESSAGE)
	{
		return -1;
	}
	m_MsgList.push(msg);
	SetEvent(mCS_Message);
	return 1;
}

MSG* CXMessageList::GetTopMessage()
{
	MSG *pMsg = NULL;
	//ZeroMemory(pMsg, sizeof(MSG));
	if (!m_MsgList.empty())
	{
		pMsg = m_MsgList.front();
		m_MsgList.pop();
	}
	if(m_MsgList.empty())
	{
		ResetEvent(mCS_Message);
	}
	return pMsg;
}

MSG * CXMessageList::WaitForMessage()
{
	if(!m_MsgList.empty())
	{
		return GetTopMessage();
	}
	else
	{
		WaitForSingleObject(mCS_Message, INFINITE);
		return GetTopMessage();
	}
}

CXMessageList::CXMessageList()
{
	char CSName[32];
	DWORD ThreadID = GetCurrentThreadId();
	sprintf_s(CSName, "MsList - %x", ThreadID);
	mCS_Message = CreateEvent(NULL, FALSE, TRUE, (LPCWSTR)CSName);
	cout << CSName << endl;
}
int main()
{
	CXMessageList lMessage;
	
}

  具体操作还待测试。因为我对windows消息编程还不熟悉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值