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