www.pudn.com > gps-time.rar > Dog.cpp


// Dog.cpp: implementation of the CDog class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
//#include "TestDog.h" 
#include "Dog.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CDog::CDog() 
{ 
	//return; 
	bDogServerAskMeExit=false; 
	for(int i=0;i<20;i++) 
	{ 
		bUserActive[i]=true; 
		hSetUser[i]=CreateEvent( NULL, TRUE, FALSE,NULL ); 
		ResetEvent(hSetUser[i]); 
		TRACE("\nCreateEvent"); 
	} 
	iUsers=2; 
	bSetEvent=true; 
	iUserNotActiveTimers=0; 
 
	if(NULL==(pSDog=new CDogServer)) 
		return;	 
	if(!pSDog->CreateDispatch(("DogServer.CDogServer"))) 
	{ 
		long x=GetLastError();	 
		return; 
	}	 
	LPDISPATCH  lpActive=pSDog->GetDog();  
	pDog=new CActiveDog(lpActive); 
	pDog->LetDogName("区域通信"); 
} 
 
CDog::~CDog() 
{ 
	for(int i=0;i<20;i++) 
	{ 
		CloseHandle(hSetUser[i]); 
	} 
	if(pDog!=NULL) 
	{ 
		try 
		{ 
			pDog->TellQuit(); 
			//Sleep(200); 
		} 
		catch(...) 
		{ 
		} 
		try 
		{ 
			delete pDog; 
		} 
		catch(...) 
		{ 
		} 
	} 
	if(pSDog!=NULL) 
	{ 
		try 
		{ 
			delete pSDog; 
		} 
		catch(...) 
		{ 
		} 
	} 
} 
 
void CDog::run() 
{ 
//	return; 
	if (bSetEvent==true) 
	{ 
		for(int i=0;i3) 
			{ 
				TRACE("iUserNotActiveTimers>3"); 
				return; 
			} 
			else 
			{ 
				bActive=pDog->TellActive(); 
				if(bActive==FALSE) 
					{ 
					bDogServerAskMeExit=true;	 
					::PostMessage(AfxGetMainWnd()->m_hWnd,WM_CLOSE,0,0); 
					} 
			} 
 
		} 
		catch(...) 
		{ 
			delete pSDog; 
			delete pDog; 
			if(NULL==(pSDog=new CDogServer)) 
				return;	 
			if(!pSDog->CreateDispatch(("DogServer.CDogServer"))) 
			{ 
				long x=GetLastError();	 
				return; 
			}	 
			LPDISPATCH  lpActive=pSDog->GetDog();  
			pDog=new CActiveDog(lpActive); 
			pDog->LetDogName("区域通信"); 
		} 
	} 
}