From 6e0a9dd083fae3138418444eb783e99509bb522b Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 금, 09 7월 2021 12:02:49 +0900
Subject: [PATCH] Merge branch 'feature/#3486_CF_AOI_Review_Review_History_프로그램_테스트_및_적용' into feature/#3495_CF_AOI_Review(QD,_Blue)_GlassLoading_시_다운_현상_조치

---
 ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp |  183 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 183 insertions(+), 0 deletions(-)

diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp b/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp
new file mode 100644
index 0000000..85f4cab
--- /dev/null
+++ b/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp
@@ -0,0 +1,183 @@
+#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)
+	{
+		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_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_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);
+
+			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];
+
+	return TRUE;
+}

--
Gitblit v1.9.3