#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)
|
{
|
delete m_pGlassRawData;
|
delete m_pGlassRawInfo;
|
|
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)
|
//_grmDitGlassRawInfo SemiServer;
|
m_pGlassRawInfo = new _grmDitGlassRawInfo;
|
if (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);
|
// }
|
|
|
//0À¸·Î ÃʱâÈ
|
m_pGlassRawData = new char[nGlassRawSharedSize];
|
if(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;
|
}
|