예제 #1
0
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;
}
예제 #2
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;
}
예제 #3
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.");
		}
    }
}