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