消息队列改写

根据 博客园博主+石头+的原始代码,我修改为利用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消息编程还不熟悉。

原文地址:https://www.cnblogs.com/xiangshancuizhu/p/2711870.html