亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? clientimpleventmanager.cpp

?? 270的linux說明
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*

Copyright (c) 2008, Intel Corporation. 

All rights reserved.

 

Redistribution and use in source and binary forms, with or without modification, 
are permitted provided that the following conditions are met:


    * Redistributions of source code must retain the above copyright notice, 
this list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright notice, 
this list of conditions and the following disclaimer in the documentation and/or 
other materials provided with the distribution.

    * Neither the name of Intel Corporation nor the names of its contributors 
may be used to endorse or promote products derived from this software without 
specific prior written permission.

 

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
OF SUCH DAMAGE.

*/#include "base_EventClient_Impl.h"#include "base_Observer_Impl.h"#include "ClientImplEventManager.h"#include "base_Exception.h"#include <algorithm>//CClientImplEventManager g_ClientImplEventManagerInst;extern "C" void MonitorTrigger(BOOL bStart){	if(bStart)		CClientImplEventManager::GetClientImplEventManagerInst().StartMonitor();	else		CClientImplEventManager::GetClientImplEventManagerInst().EndMonitor();	/*	if(bStart)		g_ClientImplEventManagerInst.StartMonitor();	else		g_ClientImplEventManagerInst.EndMonitor();*/}////////////////////////////////////////////////////////////////////////////////////CMapEventType2EventBindCMapEventType2EventBind::CMapEventType2EventBind(){	m_MapEventType2EventBind.clear();}CMapEventType2EventBind::~CMapEventType2EventBind(){	MapEventType2EventBind::iterator it = m_MapEventType2EventBind.begin();	for(; it != m_MapEventType2EventBind.end(); it++)		delete it->second;}bool CMapEventType2EventBind::HasAddedObserver(Event::EventType eType){	MapEventType2EventBind::iterator it = m_MapEventType2EventBind.find(eType);	if(it != m_MapEventType2EventBind.end())		return true;	else		return false;}void CMapEventType2EventBind::RemoveEventBind(Event::EventType eType, BOOL &bDeleteMap){	MapEventType2EventBind::iterator itr = m_MapEventType2EventBind.find(eType);	if(itr != m_MapEventType2EventBind.end())	{		delete itr->second;		m_MapEventType2EventBind.erase(itr);		if(m_MapEventType2EventBind.size() == 0)			bDeleteMap = TRUE;		else			bDeleteMap = FALSE;	}}//given [(ServerObject *) + Event::EventType], find respondent (CEventBind *),//if not exist && bCreateNoneExist, create itCEventBind *CMapEventType2EventBind::GetEventBind(		EventClientImpl *pEvtCltImp, Event::EventType eType, BOOL bCreateNoneExist/* = TRUE*/){	MapEventType2EventBind::iterator itr = m_MapEventType2EventBind.find(eType);	if(itr != m_MapEventType2EventBind.end())		return itr->second;	else if(bCreateNoneExist)	{		CEventBind *pEb = new CEventBind(pEvtCltImp, eType);		pair<Event::EventType, CEventBind *> ePair(eType, pEb);		m_MapEventType2EventBind.insert(ePair);		return pEb;	}	else		return NULL;}//CMapEventType2EventBind//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////CClientEventMapManagerCClientEventMapManager::CClientEventMapManager(){	m_mapSvrObj.clear();}CClientEventMapManager::~CClientEventMapManager(){	MapSvrObj::iterator it = m_mapSvrObj.begin();	for(; it != m_mapSvrObj.end(); it++)		delete it->second;}bool CClientEventMapManager::HasAddedObserver(void *pSvrObj, Event::EventType eType){	MapSvrObj::iterator it = m_mapSvrObj.find(pSvrObj);	if(it != m_mapSvrObj.end())	{		CMapEventType2EventBind *pMap = it->second;		return pMap->HasAddedObserver(eType);	}	else		return false;}//given [(ServerObject *) + Event::EventType], find respondent (CEventBind *),//if not exist && bCreateNoneExist, create it//EventClientImpl * is not persistent while the underlying ServerObject * isCEventBind *CClientEventMapManager::GetEventBind(EventClientImpl *pEvtCltImp, 				 Event::EventType eType, BOOL bCreateNoneExist/* = TRUE*/){	CMapEventType2EventBind *pMapEventType2EventBind = NULL;	void *pSvrObj = pEvtCltImp->GetSvrObj();	MapSvrObj::iterator itr = m_mapSvrObj.find(pSvrObj);	if(itr != m_mapSvrObj.end())		pMapEventType2EventBind = itr->second;	else if(bCreateNoneExist)	{		pMapEventType2EventBind = new CMapEventType2EventBind();		m_mapSvrObj.insert(pair<void *, CMapEventType2EventBind *>(pSvrObj, pMapEventType2EventBind));	}	if(pMapEventType2EventBind)		return pMapEventType2EventBind->GetEventBind(pEvtCltImp, eType, bCreateNoneExist);	else		return NULL;}void CClientEventMapManager::RemoveEventBind(EventClientImpl *pEvtCltImp, Event::EventType eType){	void *pSvrObj = pEvtCltImp->GetSvrObj();	MapSvrObj::iterator itr = m_mapSvrObj.find(pSvrObj);	if(itr != m_mapSvrObj.end())	{		CMapEventType2EventBind *pMapEventType2EventBind = itr->second;		BOOL bDeleteMap;		pMapEventType2EventBind->RemoveEventBind(eType, bDeleteMap);		if(bDeleteMap)		{			delete pMapEventType2EventBind;			m_mapSvrObj.erase(itr);		}	}}//CClientEventMapManager////////////////////////////////////////////////////////////////////////////////////CClientImplEventManager CClientImplEventManager::s_ClientImplEventManagerInst;CClientImplEventManager s_ClientImplEventManagerInst;//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////CClientImplEventManager::CClientImplEventManager(){	//cout << "CClientImplEventManager::CClientImplEventManager" << endl;	m_hCtrlEvent = CreateEvent(NULL, FALSE, FALSE, NULL);	InitializeCriticalSection(&m_cs);	m_nEventCount = 0;	m_hMonitorThread = INVALID_HANDLE_VALUE;	m_mapObserversOnSameEvent.clear();	memset(m_arrayEventHandle, 0, sizeof(HANDLE) * MAXIMUM_WAIT_OBJECTS);	MonitorTrigger(TRUE);//nhu}CClientImplEventManager::~CClientImplEventManager(){	EndMonitor();	//cout << "CClientImplEventManager::~CClientImplEventManager" << endl;	DeleteCriticalSection(&m_cs);	CloseHandle(m_hCtrlEvent);	MapObserversOnSameEvent::iterator it = m_mapObserversOnSameEvent.begin();	for(; it != m_mapObserversOnSameEvent.end(); it++)		delete (*it).second;}const ObserverImpl* CClientImplEventManager::GetObserver(HANDLE hEvent, unsigned int nIndex ){	const ObserverImpl* pObserver = NULL;	EnterCriticalSection(&m_cs);	try 	{		MapObserversOnSameEvent::iterator it = m_mapObserversOnSameEvent.find(hEvent);			if(it != m_mapObserversOnSameEvent.end())		{			CObserversOnSameEvent* m_vObservers = (*it).second;			if ( nIndex < m_vObservers->GetObservCount())			{				pObserver = m_vObservers->GetObserver(nIndex);			}		}	}	catch(...)	{		LeaveCriticalSection(&m_cs);				IntelMobileException ex( IntelMobileText("Operation Error"), IntelMobileText("CClientImplEventManager"), IntelMobileText("GetObserver") );        throw( ex ); 	}	LeaveCriticalSection(&m_cs);		return pObserver;}bool CClientImplEventManager::RemoveObservers(HANDLE hEvent ){	bool bRemoved = true;	EnterCriticalSection(&m_cs);	try	{		MapObserversOnSameEvent::iterator it = m_mapObserversOnSameEvent.find(hEvent);			if(it != m_mapObserversOnSameEvent.end())		{			CObserversOnSameEvent* m_vObservers = (*it).second;			m_vObservers->RemoveObservers();			m_mapObserversOnSameEvent.erase(it);			delete m_vObservers;//			m_nThreadCtrlFlag = nDELETE_EVENT_FROM_MONITOR;					//event handle is added / removed only by main thread			DeleteEventFromMonitor(hEvent);			SetEvent(m_hCtrlEvent);		}	}	catch(...)	{		LeaveCriticalSection(&m_cs);		bRemoved = false;  		IntelMobileException ex( IntelMobileText("Operation Error"), IntelMobileText("CClientImplEventManager"), IntelMobileText("RemoveObserver") );        throw( ex ); 	}	LeaveCriticalSection(&m_cs);	return bRemoved;}unsigned int CClientImplEventManager::GetObserverCount( HANDLE hEvent ){	unsigned int iCount = 0;		EnterCriticalSection(&m_cs);	try	{		MapObserversOnSameEvent::iterator it = m_mapObserversOnSameEvent.find(hEvent);			if(it != m_mapObserversOnSameEvent.end())		{			//the event handle exist,add the observer to its observer_list			iCount = (*it).second->GetObservCount();		}			}	catch(...)	{		LeaveCriticalSection(&m_cs);		IntelMobileException ex( IntelMobileText("Operation Error"), IntelMobileText("CClientImplEventManager"), IntelMobileText("GetObserverCount") );        throw( ex ); 	}	LeaveCriticalSection(&m_cs);	return iCount;}BOOL CClientImplEventManager::StartMonitor(){	//cout<<"startmonitor!\n";	try	{		//cout << "m_hMonitorThread " << m_hMonitorThread << endl;		if(m_hMonitorThread == INVALID_HANDLE_VALUE)		{//			m_nThreadCtrlFlag = nSTART_THREAD;			m_bStopMonitorThread = FALSE;			//the 1st should be m_hCtrlEvent to monitor			if(m_nEventCount == 0)			{				//cout << "AddEvent2Monitor is "<< m_hCtrlEvent << endl;				AddEvent2Monitor(m_hCtrlEvent);			}						//cout << "Before CreateThread" << endl;			m_hMonitorThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MonitorThreadProc, 				this, 0, &m_dwThreadId);		}	}	catch(...)	{		IntelMobileException ex( IntelMobileText("Operation Error"), IntelMobileText("CClientImplEventManager"), IntelMobileText("OnUnderlayingEvent") );        throw( ex ); 	}	return (m_hMonitorThread != INVALID_HANDLE_VALUE);}DWORD WINAPI CClientImplEventManager::MonitorThreadProc(LPVOID lpParam){	//cout << "MonitroThreadProc Begine" << endl;	try	{		CClientImplEventManager *pEventMgr = (CClientImplEventManager *)lpParam;		//while(nSTOP_THREAD != pEventMgr->m_nThreadCtrlFlag)		while(FALSE == pEventMgr->m_bStopMonitorThread)		{			//cout<<"Before WaitForEvents\t"<<endl;			DWORD dwRtn = pEventMgr->WaitForEvents();			//cout<<"After WaitForEvents"<<endl;			switch(dwRtn)			{			case WAIT_OBJECT_0:				//control event:				//nSTOP_THREAD/nADD_EVENT_FOR_MONITOR/nDELETE_EVENT_FROM_MONITOR				//event handle is added / removed only by main thread				//pEventMgr->OnCtrlEvent();				//cout << "WAIT_OBJECT_0" << endl;				break;			default://Underlaying Event				//cout << "Underlaying Event" << endl;				pEventMgr->OnUnderlayingEvent(dwRtn - WAIT_OBJECT_0);				break;			}		}		//cout << "MonitorThreadProc Finish" << endl;	}	catch(...)	{		IntelMobileException ex( IntelMobileText("Operation Error"), IntelMobileText("CClientImplEventManager"), IntelMobileText("OnUnderlayingEvent") );        throw( ex ); 	}	return 0;}//add a new event to monitor//return false if try to monitor more than 63 eventsBOOL CClientImplEventManager::AddEvent2Monitor(HANDLE hEvent){	BOOL bRtn = TRUE;	EnterCriticalSection(&m_cs);	if(MAXIMUM_WAIT_OBJECTS == m_nEventCount)	{		//WaitForMultipleObjects can monitor no more than 64 events		bRtn = FALSE;	}	else		m_arrayEventHandle[m_nEventCount++] = hEvent;	LeaveCriticalSection(&m_cs);	return bRtn;}void CClientImplEventManager::EndMonitor(){	try	{		if(m_hMonitorThread != INVALID_HANDLE_VALUE)		{//			m_nThreadCtrlFlag = nSTOP_THREAD;				m_bStopMonitorThread = TRUE;			//cout << "EndMonitor handle is " << m_hCtrlEvent << endl;			/*			if(SetEvent(m_hCtrlEvent))//set special event to notify monitoring thread				//cout << "SetEvent Success\n";			else				//cout << "SetEvent Fail\n";			*/			SetEvent(m_hCtrlEvent);			//wait the end of the monitor thread for 5 seconds, prevent from resource leak			if(WAIT_TIMEOUT == WaitForSingleObject(m_hMonitorThread, 5 * 1000))				TerminateThread(m_hMonitorThread, 0);//Terminate Thread rudely			//CloseHandle(m_hMonitorThread);			m_hMonitorThread = INVALID_HANDLE_VALUE;			m_nEventCount = 0;			memset(m_arrayEventHandle, 0, sizeof(HANDLE) * MAXIMUM_WAIT_OBJECTS);		}	}	catch(...)	{		IntelMobileException ex( IntelMobileText("Operation Error"), IntelMobileText("CClientImplEventManager"), IntelMobileText("EndMonitor") );        throw( ex ); 	}}// Update the theEvent of the EventHandlebool CClientImplEventManager::UpdateEventOfHandle(HANDLE hEvent, Event &pTheEvent){	bool bRtn = true;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕中文字幕一区二区| 亚洲一区二区在线视频| 国产精品久线观看视频| 亚洲一级电影视频| 成人午夜免费电影| 日韩欧美精品在线| 亚洲视频一区二区在线| 久久99久久99小草精品免视看| 99久久久精品| 久久综合色婷婷| 性做久久久久久免费观看| 成人激情免费电影网址| 欧美一区二区免费视频| 日本一区二区免费在线| 五月天视频一区| 成人18视频日本| 精品国产乱码久久久久久久| 亚洲精品成人天堂一二三| 国产精品影视在线观看| 91麻豆精品国产91久久久久久久久| 国产精品欧美极品| 国产一区二区三区在线观看免费视频 | 在线观看日韩国产| 亚洲国产精品av| 久久精品72免费观看| 欧美午夜一区二区三区| 亚洲欧美日韩国产综合在线| 国产精品一品二品| 久久精品夜色噜噜亚洲aⅴ| 美女久久久精品| 欧美精品电影在线播放| 亚洲午夜精品在线| 欧美日韩中字一区| 亚洲国产日韩在线一区模特| 91在线视频官网| 亚洲日本在线a| 色综合中文综合网| 日本一区二区成人| 国产成人综合自拍| 国产日韩欧美制服另类| 国内精品久久久久影院色| 日韩一级精品视频在线观看| 美日韩一区二区| 欧美mv和日韩mv的网站| 韩国精品主播一区二区在线观看| 欧美放荡的少妇| 久久精品国产免费看久久精品| 欧美一区二区视频在线观看2022| 日日夜夜免费精品| 日韩欧美国产麻豆| 国产盗摄一区二区三区| 国产精品久久久久一区二区三区| 99久免费精品视频在线观看| 综合久久久久久久| 欧美日韩dvd在线观看| 日韩精品一二三| 精品电影一区二区三区 | 日韩高清不卡一区二区| 欧美一区二区播放| 国产精品自拍一区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 91亚洲精品久久久蜜桃| 国产精品久久久久9999吃药| 一本久道久久综合中文字幕| 一区二区三区免费网站| 欧美精三区欧美精三区| 美美哒免费高清在线观看视频一区二区| 7777精品伊人久久久大香线蕉经典版下载 | 久久久综合视频| 波多野结衣91| 亚洲成av人片在线观看| 久久综合九色综合欧美亚洲| 精品久久久久99| 成人丝袜18视频在线观看| 亚洲免费三区一区二区| 一本大道av伊人久久综合| 午夜一区二区三区在线观看| 欧美一区二区高清| av在线播放不卡| 日韩黄色小视频| 国产精品剧情在线亚洲| 欧美一区二区视频网站| av在线不卡电影| 国内精品免费**视频| 亚洲乱码中文字幕综合| 久久久三级国产网站| 欧美三级中文字幕| 丁香婷婷综合网| 美女在线观看视频一区二区| 亚洲精品中文字幕乱码三区| 欧美成人欧美edvon| 欧美日精品一区视频| 成人丝袜视频网| 国产永久精品大片wwwapp| 亚洲人成伊人成综合网小说| 欧美性xxxxxx少妇| 国产麻豆视频精品| 日韩电影在线免费| 亚洲精品v日韩精品| 日本一区二区免费在线观看视频| 欧美一区二区高清| 欧美日韩国产片| 日本乱码高清不卡字幕| 国产91精品入口| 国产精品原创巨作av| 久久不见久久见中文字幕免费| 亚洲第一久久影院| 亚洲国产综合人成综合网站| 亚洲欧洲日韩在线| 国产精品无人区| 国产亚洲欧美日韩日本| 日韩欧美成人午夜| 日韩一区二区三区在线视频| 欧美福利视频导航| 欧美精品在线一区二区三区| 欧美日韩午夜精品| 欧美日韩精品一区二区三区蜜桃| www.av亚洲| 国产精品一区久久久久| 麻豆91在线观看| 美腿丝袜亚洲一区| 免费亚洲电影在线| 看电影不卡的网站| 久久9热精品视频| 久久国产精品99久久人人澡| 麻豆中文一区二区| 国模一区二区三区白浆| 狠狠色丁香久久婷婷综合_中| 麻豆成人av在线| 麻豆精品视频在线观看| 精品一区二区在线观看| 国产原创一区二区三区| 成人美女在线视频| 91国内精品野花午夜精品 | 亚洲综合视频在线观看| 一卡二卡三卡日韩欧美| 亚洲成人黄色影院| 奇米888四色在线精品| 六月丁香婷婷色狠狠久久| 麻豆精品国产传媒mv男同| 久久www免费人成看片高清| 国产老肥熟一区二区三区| 欧美美女喷水视频| 日韩一级精品视频在线观看| 26uuu国产电影一区二区| 91在线porny国产在线看| 成人黄动漫网站免费app| 成人高清视频在线| 国产另类ts人妖一区二区| 顶级嫩模精品视频在线看| 在线视频综合导航| 久久9热精品视频| 99国产欧美另类久久久精品| 亚洲在线视频免费观看| 精品在线视频一区| 欧美人动与zoxxxx乱| 一区二区视频在线| voyeur盗摄精品| 久久精品日韩一区二区三区| 日本欧美一区二区三区| 欧美日韩美少妇| 亚洲另类中文字| 日韩免费高清av| 午夜电影网一区| 欧美在线一区二区三区| 亚洲视频一区二区在线| 99久久久精品| 亚洲人精品午夜| 色综合久久久久久久久久久| 中文字幕一区二区不卡| jvid福利写真一区二区三区| 中文字幕精品一区| 成人免费视频一区| 国产精品久久影院| 91香蕉国产在线观看软件| 亚洲午夜在线观看视频在线| 91蜜桃免费观看视频| 尤物在线观看一区| 欧美亚洲丝袜传媒另类| 亚洲国产精品一区二区久久| 欧美亚洲自拍偷拍| 午夜精品久久一牛影视| 欧美日韩视频一区二区| 午夜欧美2019年伦理| 欧美一区二区三区婷婷月色| 蜜桃精品视频在线| 久久综合久久综合久久综合| 国产麻豆视频精品| 国产欧美一区二区精品性色| 成人激情校园春色| 亚洲青青青在线视频| 欧美三级电影网站| 蜜臀av一区二区在线免费观看 | 91网上在线视频| 亚洲国产日韩精品| 日韩一区二区三免费高清| 国产一区二区在线视频| 亚洲欧洲av色图| 欧美高清激情brazzers| 国产一区二区免费视频|