bool CSMOption::Init(key_t key, uint32 u4Size, uint32 u4ObjectCount, bool& blIsCreate) { bool blIsLinuxFirst = false; //得到共享内存大小 //1字节当前共享内存状态,0是未初始化,1是已初始化 //4字节的共享内存更新信息,由watch维护更新 uint32 u4MemorySize = sizeof(uint8) + sizeof(uint32) + sizeof(_SMHeader)*u4ObjectCount + u4Size*u4ObjectCount; #ifdef WIN32 if(m_pShareMemory == NULL) { m_pShareMemory = new ACE_Shared_Memory_MM(key, u4MemorySize); } #else if(m_pShareMemory == NULL) { m_pShareMemory = new ACE_Shared_Memory_SV(); //先尝试打开共享内存 int nError = m_pShareMemory->open(key, u4MemorySize, ACE_Shared_Memory_SV::ACE_OPEN); if(nError != 0) { //创建共享内存 nError = m_pShareMemory->open(key, u4MemorySize, ACE_Shared_Memory_SV::ACE_CREATE); if(nError != 0) { OUR_DEBUG((LM_ERROR, "[CSMOption::Init]create share memory fail(%d).\n", errno)); } blIsLinuxFirst = true; } blIsCreate = true; } #endif m_pData = (char *)m_pShareMemory->malloc(); if(NULL == m_pData) { //PRINTF("[CSMOption::Init]open share memory fail.\n"); return false; } if(true == blIsLinuxFirst) { ACE_OS::memset(m_pData, 0, u4MemorySize); } m_u4ObjectCount = u4ObjectCount; m_u4BufferSize = u4Size; //是否初始化共享内存 bool blState = GetInitState(); if(true == blState) { Init_Memory(); } else { Init_Memory(); blIsCreate = false; } return true; }
Spike_Logger::Spike_Logger(void) : DefaultGUIModel("Delayed Buffer To Log",::vars,::num_vars) { setWhatsThis( "<p><b>Delayed Buffer To Log:</b><br>This module will delay the input signal and on demand will start to output it to the loggind model</p>"); createGUI(vars, num_vars); /* * Initialize Parameters & Variables */ Channel_A = NULL; Channel_B = NULL; Channel_C = NULL; Channel_D = NULL; Channel_E = NULL; Channel_F = NULL; Channel_G = NULL; Channel_H = NULL; Channel_I = NULL; Channel_J = NULL; Iteration_Back = 25; // default size Init_Memory(); /* * Initialize the GUI */ setParameter("How Much Back?",Iteration_Back); refresh(); QTimer::singleShot(0, this, SLOT(resizeMe())); }
void Spike_Logger::update(DefaultGUIModel::update_flags_t flag) { if(flag == MODIFY) { int temp_Memory_Back = getParameter("How Much Back?").toDouble(); if (temp_Memory_Back != Iteration_Back){ Iteration_Back = temp_Memory_Back; Init_Memory(); } } }