Exemple #1
0
	Bool HsRobot::Run()
	{		
		m_bRunning = true;
		
		for (Int32 i=0;i<m_iCount;i++)
		{
			HawkThread* pThread = new HawkThread(hawk_RobotEntityRoutine);
			pThread->Start();
			m_vThreads.push_back(pThread);
		}

		while (m_bRunning)
		{
			HawkSleep(DEFAULT_SLEEP);
		}

		for (Size_t i=0;i<m_vThreads.size();i++)
		{
			if (m_vThreads[i])
			{
				m_vThreads[i]->Close();
				HAWK_RELEASE(m_vThreads[i]);
			}			
		}
		m_vThreads.clear();

		return true;
	}
	PVoid hawk_ThreadRoutine(void* pArgs)
	{
		HawkThread* pThread = static_cast<HawkThread*>(pArgs); 
		if (pThread)
			return pThread->RunLoop();

		return 0;
	}
int main(int argc, Char* argv[])
{
	HawkUtil::Init();
	
	REGISTER_PROTO(ProtoA);
	REGISTER_PROTO(ProtoB);
	REGISTER_PROTO(ProtoC);

	if (argc >= 2) 
		g_IpAddr = argv[1];

	if (!g_IpAddr.size())
		g_IpAddr = HawkOSOperator::ConsoleInput();

	Int32 iCount = 1;
	if (argc >= 3)
		iCount = HawkStringUtil::StringToInt<AString>(argv[2]);

	for (Int32 i=0;i<iCount;i++)
	{
		HawkThread* pThread = new HawkThread(hawk_EchoClientRoutine);
		pThread->Start();
		g_Threads.push_back(pThread);

		HawkSleep(10);
	}	

	while(HawkOSOperator::WaitKeyboardInput("",false) != 'Q');
	
	g_Running = false;

	for (Size_t i=0;i<g_Threads.size();i++)
	{
		g_Threads[i]->Close();
		HAWK_RELEASE(g_Threads[i]);
	}

	HawkUtil::Stop();
	HawkUtil::Release();
	return 0;
}