#include "StdAfx.h" #include "DitGlassRawServer.h" CDitGlassRawServer::CDitGlassRawServer(void) : m_mxCommandProcess(FALSE, MUTEX_RAWMESSENGER) { m_hMapBasicInfo = NULL; m_hMapGlassData = NULL; m_pGlassRawInfo = NULL; m_pGlassRawData = NULL; m_nLastCommandIdx = -1; } CDitGlassRawServer::~CDitGlassRawServer(void) { if (m_hMapBasicInfo!=NULL) { ::UnmapViewOfFile(m_hMapBasicInfo); m_pGlassRawInfo = NULL; } if (m_hMapGlassData!=NULL) { ::UnmapViewOfFile(m_hMapGlassData); m_pGlassRawData = NULL; } } BOOL CDitGlassRawServer::CreateServer( int nCellNum /*= 100*/, int nDefectNum /*= 2000*/ ) { if(CreateGlassRawInfo() == FALSE) { return FALSE; } if(sizeof(_grmGlassData) != m_pGlassRawInfo->m_nSizeOfGlassData || sizeof(_grmBlockData) != m_pGlassRawInfo->m_nSizeOfBlockData || sizeof(_grmCellData) != m_pGlassRawInfo->m_nSizeOfCellData || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfDefectData || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfStackData /*< KJG 20211024 - #3487 ADD Start >*/ || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfRawMergeData) /*< KJG 20211024 - #3487 ADD End >*/ { return FALSE; } m_pGlassRawInfo->m_nGlassMaxDataNum = 1; m_pGlassRawInfo->m_nBlockMaxDataNum = 1; m_pGlassRawInfo->m_nCellMaxDataNum = nCellNum; m_pGlassRawInfo->m_nDefectMaxDataNum = nDefectNum; m_pGlassRawInfo->m_nStackMaxDataNum = nDefectNum; /*< KJG 20211024 - #3487 ADD Start >*/ m_pGlassRawInfo->m_nRawMergeMaxDataNum = nDefectNum; /*< KJG 20211024 - #3487 ADD End >*/ m_pGlassRawInfo->m_nGlassRawDataSize; { int nDataNum = 0; m_pGlassRawInfo->m_nGlassDataPoint = nDataNum; nDataNum += m_pGlassRawInfo->m_nSizeOfGlassData + m_pGlassRawInfo->m_nSizeOfGlassData%4; m_pGlassRawInfo->m_nBlockDataPoint = nDataNum; nDataNum += m_pGlassRawInfo->m_nSizeOfBlockData + m_pGlassRawInfo->m_nSizeOfBlockData%4; m_pGlassRawInfo->m_nCellDataPoint = nDataNum; nDataNum += (m_pGlassRawInfo->m_nSizeOfCellData + m_pGlassRawInfo->m_nSizeOfCellData%4)*nCellNum; m_pGlassRawInfo->m_nDefectDataPoint = nDataNum; nDataNum += (m_pGlassRawInfo->m_nSizeOfDefectData + m_pGlassRawInfo->m_nSizeOfDefectData%4)*nDefectNum; m_pGlassRawInfo->m_nStackDataPoint = nDataNum; nDataNum += (m_pGlassRawInfo->m_nSizeOfStackData + m_pGlassRawInfo->m_nSizeOfStackData % 4)*nDefectNum; /*< KJG 20211024 - #3487 ADD Start >*/ m_pGlassRawInfo->m_nRawMergeDataPoint = nDataNum; nDataNum += (m_pGlassRawInfo->m_nSizeOfRawMergeData + m_pGlassRawInfo->m_nSizeOfRawMergeData % 4)*nDefectNum; /*< KJG 20211024 - #3487 ADD End >*/ m_pGlassRawInfo->m_nGlassRawDataSize = nDataNum; } if(CreateGlassRawData() == FALSE) { return FALSE; } return TRUE; } BOOL CDitGlassRawServer::CreateGlassRawInfo() { if(m_hMapBasicInfo == NULL) { BOOL bCreateMem = TRUE; m_hMapBasicInfo = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE , 0, sizeof(_grmDitGlassRawInfo), SHAREDMEMNAME_BASICINFO); if (::GetLastError() == ERROR_ALREADY_EXISTS) { m_hMapBasicInfo = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_BASICINFO); bCreateMem = FALSE; } if (m_hMapBasicInfo) { m_pGlassRawInfo = (_grmDitGlassRawInfo*)::MapViewOfFile(m_hMapBasicInfo, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(_grmDitGlassRawInfo)); } if(m_hMapBasicInfo == NULL || m_pGlassRawInfo == NULL) { if (m_hMapBasicInfo!=NULL) { ::UnmapViewOfFile(m_hMapBasicInfo); m_pGlassRawInfo = NULL; } m_pGlassRawInfo = NULL; return FALSE; } //0À¸·Î ÃʱâÈ­ if(bCreateMem && m_pGlassRawInfo) { ZeroMemory(m_pGlassRawInfo,sizeof(_grmDitGlassRawInfo)); m_pGlassRawInfo->m_nSizeOfGlassData = sizeof(_grmGlassData) ; m_pGlassRawInfo->m_nSizeOfBlockData = sizeof(_grmBlockData); m_pGlassRawInfo->m_nSizeOfCellData = sizeof(_grmCellData); m_pGlassRawInfo->m_nSizeOfDefectData = sizeof(_grmDefectData); m_pGlassRawInfo->m_nSizeOfStackData = sizeof(_grmDefectData); /*< KJG 20211024 - #3487 ADD Start >*/ m_pGlassRawInfo->m_nSizeOfRawMergeData = sizeof(_grmDefectData); /*< KJG 20211024 - #3487 ADD End >*/ int bytealign = m_pGlassRawInfo->m_nSizeOfGlassData%4; } } return TRUE; } BOOL CDitGlassRawServer::CreateGlassRawData() { int nGlassRawSharedSize = (int)(m_pGlassRawInfo->m_nGlassRawDataSize); if(m_hMapGlassData == NULL) { BOOL bCreateMem = TRUE; m_hMapGlassData = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE , 0, nGlassRawSharedSize, SHAREDMEMNAME_GLASSDATA); if (::GetLastError() == ERROR_ALREADY_EXISTS) { m_hMapGlassData = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_GLASSDATA); bCreateMem = FALSE; } if (m_hMapGlassData) { m_pGlassRawData = (char*)::MapViewOfFile(m_hMapGlassData, FILE_MAP_ALL_ACCESS, 0, 0, nGlassRawSharedSize); } if(m_hMapGlassData == NULL || m_pGlassRawData == NULL) { if (m_hMapGlassData != NULL) { ::UnmapViewOfFile(m_hMapGlassData); m_pGlassRawData = NULL; } m_pGlassRawData = NULL; return FALSE; } //0À¸·Î ÃʱâÈ­ if(bCreateMem && m_pGlassRawData) ZeroMemory(m_pGlassRawData,sizeof(char)*nGlassRawSharedSize); } m_pGlassData = (_grmGlassData*)&m_pGlassRawData[m_pGlassRawInfo->m_nGlassDataPoint]; m_pBlockData = (_grmBlockData*)&m_pGlassRawData[m_pGlassRawInfo->m_nBlockDataPoint]; m_pCellData = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint]; m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint]; m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint]; /*< KJG 20211024 - #3487 ADD Start >*/ m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint]; /*< KJG 20211024 - #3487 ADD End >*/ return TRUE; }