zoukankan      html  css  js  c++  java
  • 消息队列改写

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

  • 相关阅读:
    PHP Notice: Undefined index:解决方法
    javascript监听手机返回键
    jquery判断手指滑动方向
    php 5.5使用 array_column的方法
    html5 点击播放video的方法
    mysql并发量过大造成 update语句更新错误
    html5 微信真机调试方法vConsole
    PHP防止客户端多次点击
    jquery设置html5音量的方法
    设计模式六大原则
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/2711870.html
Copyright © 2011-2022 走看看