»õ ÆÄÀÏ |
| | |
| | | #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 |
| | | || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfRawMergeData) |
| | | { |
| | | 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; |
| | | m_pGlassRawInfo->m_nRawMergeMaxDataNum = nDefectNum; |
| | | |
| | | 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; |
| | | |
| | | m_pGlassRawInfo->m_nRawMergeDataPoint = nDataNum; |
| | | nDataNum += (m_pGlassRawInfo->m_nSizeOfRawMergeData + m_pGlassRawInfo->m_nSizeOfRawMergeData % 4)*nDefectNum; |
| | | |
| | | 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); |
| | | m_pGlassRawInfo->m_nSizeOfRawMergeData = sizeof(_grmDefectData); |
| | | |
| | | 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]; |
| | | m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint]; |
| | | |
| | | return TRUE; |
| | | } |