void * YHSocketSendThread::Execute()
{
	bool loop = true;
	
	while(loop)
	{
		try
		{
			m_manager->m_condition.LockMutEx();
			
			// 如果没有消息等待发送, 则等待, 添加消息后, 该线程将被唤醒
			while (m_manager->m_queue->count() == 0)
			{
				m_manager->m_condition.Wait();
				
				if (m_destroy)
				{
					m_manager->m_condition.UnlockMutEx();
					return NULL;
				}
			}
			
			YHByteArray * bytes = (YHByteArray *)m_manager->m_queue->objectAtIndex(0);
			bytes->retain();
			m_manager->m_queue->removeObjectAtIndex(0);
			
			m_manager->m_condition.UnlockMutEx();
			
			// 阻塞, 将消息发送出去
			m_manager->m_connectManager->connectedSocket()->SendData(bytes->getBuffer(), bytes->readableBytes());
			bytes->release();
			
			if (m_destroy)
			{
				loop = false;
			}
		}
		catch (SocketException e)
		{
			m_manager->m_connectManager->close();
			
			m_manager->m_condition.LockMutEx();
			m_manager->m_queue->removeAllObjects();
			m_manager->m_condition.UnlockMutEx();
			
			CCLOG("%s", (const char *)e);
			loop = false;
		}
		catch (ThreadException e)
		{
			CCLOG("%s", (const char *)e);
		}
	}
	
	return NULL;
}
YHByteArray * YHHttpClient::recvData()
{
	YHByteArray * bytes = NULL;
	if (m_queue->count() != 0)
	{
		bytes = (YHByteArray *)m_queue->objectAtIndex(0);
		bytes->retain();
		m_queue->removeObjectAtIndex(0);
	}
	
	return bytes;
}
YHByteArray * YHSocketRecvManager::recv()
{
	if (m_mutex.TryLock())
	{
		YHByteArray * bytes = NULL;
		if (m_queue->count() != 0)
		{
			bytes = (YHByteArray *)m_queue->objectAtIndex(0);
			bytes->retain();
			m_queue->removeObjectAtIndex(0);
		}
		m_mutex.Unlock();
		
		return bytes;
	}
	
	return NULL;
}