void CNetMsg::Init(void) { if(!this->p_data) this->p_data = g_netmsgpool.Get(false); this->p_msg_type = 0; this->p_data = g_netmsgpool.Get(false); this->p_len = 0; this->p_point = 0; }
void CNetMsg::Init(void) { if(!this->MsgData) this->MsgData = g_netmsgpool.Get(false); this->MsgType = 0; this->MsgData = g_netmsgpool.Get(false); this->MsgLength = 0; this->MsgPointer = 0; }
//读取信息到队列 void read_func(void *arg) { while(1) { Sleep(1); CAutoLock lock(&g_TReadLock); std::string rcv(""); try { rcv = sClient->ReceiveBytes(); } catch(...) { //Log("read_func : MsClient->ReceiveBytes() fialed."); continue; } if(strlen(rcv.c_str()) == 0) { continue; } #ifdef DEBUG_MODE std::cout << "read_func : " << rcv << std::endl; #endif char *data_buff = NULL; data_buff = reinterpret_cast<char *>(MsgPool.Get()); //已解决bug1:如果不对其内存memset清0,,内存的当前值就会覆盖上次的(memcpy), //可能导致会有"垃圾尾巴"(例如上次内容为:12345,这次的期望内容是:abc, //最后在内存的值会变为:abc45,忘注意,这个和内存池本来的实现有关。 if(data_buff) { memset(data_buff, 0, DATA_BLOCK_LEN); memcpy(data_buff, rcv.c_str(), strlen(rcv.c_str())); msg_queue.Push(data_buff); //(&doublebuffer_queue)->Push(data_buff); } else { //Log("read_func : MsgPool.Get() fialed."); } } }