void *UdpClient::DataThread(void * pParam) { if(null == pParam) return null; UdpClient *pThis = (UdpClient*)pParam; pThis->mIsDataThreadRunnung = true; while(1) { if(!pThis->mIsConnecting) break; if(!pThis->mDataList.empty()) { pthread_mutex_lock(&pThis->mMutex); string msg = pThis->mDataList.front(); pThis->mDataList.pop_front(); pthread_mutex_unlock(&pThis->mMutex); if(!pThis->mMsgHdlr) pThis->mMsgHdlr((void *)msg.c_str()); pThis->OnRecvMessage(msg); } usleep(100); } pThis->mIsDataThreadRunnung = false; return null; }