void * YHSocketRecvThread::Execute() { bool loop = true; while (loop) { try { // 接收包头 YHByteArray header; header.init(4); m_manager->m_connectManager->connectedSocket()->RecvData(header.getBuffer(), header.getCapacity(), MSG_WAITALL); uint32 size = header.getUnsignedInt(0); // 接收实际内容 YHByteArray * content = new YHByteArray(); content->init(size); m_manager->m_connectManager->connectedSocket()->RecvData(content->getBuffer(), size, MSG_WAITALL); content->setWriterIndex(size); // 将接收到的数据添加进队列 m_manager->m_mutex.Lock(); m_manager->m_queue->addObject(content); content->release(); m_manager->m_mutex.Unlock(); } catch (SocketException e) { m_destroy = true; m_manager->m_connectManager->close(); m_manager->m_mutex.Lock(); m_manager->m_queue->removeAllObjects(); m_manager->m_mutex.Unlock(); CCLOG("%s", (const char *)e); } catch (ThreadException e) { CCLOG("%s", (const char *)e); } if (m_destroy) { loop = false; } } return NULL; }