From 5f12658f37fed156e67b3318542c98f359341ffd Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 금, 05 8월 2022 17:24:00 +0900
Subject: [PATCH] 업로드 실패알람 조건 변경

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

diff --git a/ReviewHistory/ReveiwHistory/akIPCNetAOISystem.cpp b/ReviewHistory/ReveiwHistory/akIPCNetAOISystem.cpp
new file mode 100644
index 0000000..c963e99
--- /dev/null
+++ b/ReviewHistory/ReveiwHistory/akIPCNetAOISystem.cpp
@@ -0,0 +1,189 @@
+#include "StdAfx.h"
+#include "akIPCNetAOISystem.h"
+#include <process.h>
+
+#define SHAREDMEMNAME "DIT.AOISYSTEM.SHAREDMEM"
+
+akIPCNetAOISystem::akIPCNetAOISystem(void)
+: m_mxSignalProcess(FALSE, _T("IPC_NETWORKSYSTEM_MUTEX"))
+{
+	m_pParent = NULL;
+	m_nThreadSignalFlag = 0;
+	m_pIPCAOISystem = NULL;
+	m_hMapIPCAOISystem = NULL;
+	
+	InitializeCriticalSection(&m_csSignalProcess);
+}
+
+akIPCNetAOISystem::~akIPCNetAOISystem(void)
+{
+	if(m_nThreadSignalFlag == 1) m_nThreadSignalFlag = 2;
+	while(m_nThreadSignalFlag != 0)
+	{
+		Sleep(0);
+	}
+
+	if (m_pIPCAOISystem!=NULL)
+	{
+		::UnmapViewOfFile(m_pIPCAOISystem);
+		m_pIPCAOISystem = NULL;
+	}
+
+	if (m_hMapIPCAOISystem != NULL)
+	{
+		::CloseHandle(m_hMapIPCAOISystem);
+		m_hMapIPCAOISystem = NULL;
+	}
+
+}
+
+bool akIPCNetAOISystem::Create( CWnd* pParent )
+{
+	if(m_pIPCAOISystem) return false;
+
+
+	BOOL bCreateSharedMem = FALSE;//공유메모리 생성 [김태현 2018/9/10]
+	{
+		BOOL bCreateMem = TRUE;
+
+		m_hMapIPCAOISystem = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE
+			, 0, sizeof(_IPCAOISystem), SHAREDMEMNAME);
+
+		if (::GetLastError() == ERROR_ALREADY_EXISTS)
+		{
+			m_hMapIPCAOISystem = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME);
+			bCreateMem = FALSE;
+		}
+
+		if (m_hMapIPCAOISystem)
+		{
+			m_pIPCAOISystem = (_IPCAOISystem*)::MapViewOfFile(m_hMapIPCAOISystem, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(_IPCAOISystem));
+			if (m_pIPCAOISystem)
+			{
+				bCreateSharedMem = TRUE;
+			}
+		}
+		
+		//0으로 초기화
+		if(bCreateMem && m_pIPCAOISystem) ZeroMemory(m_pIPCAOISystem,sizeof(_IPCAOISystem));
+	}
+
+	if(bCreateSharedMem == FALSE) return false;
+
+	m_pParent = pParent;
+
+	_beginthread(threadSignal, NULL, this);
+
+	return true;
+}
+
+void akIPCNetAOISystem::threadSignal( void* arg )
+{
+	akIPCNetAOISystem* pThis = (akIPCNetAOISystem*)arg;
+
+	pThis->m_nThreadSignalFlag = 1;
+	pThis->processSignal();
+	pThis->m_nThreadSignalFlag = 0;
+}
+
+void akIPCNetAOISystem::processSignal()
+{
+	char m_nSignalPreAOI[INA_SIGNALNUM]={};
+	char m_nSignalCurAOI[INA_SIGNALNUM]={};
+	char m_nSignalPreReview[INA_SIGNALNUM]={};
+	char m_nSignalCurReview[INA_SIGNALNUM]={};
+
+	DWORD dwTickCount =0;
+
+	while(m_nThreadSignalFlag == 1)
+	{
+		dwTickCount = GetTickCount();
+
+		m_mxSignalProcess.Lock();
+		memcpy(m_nSignalCurAOI, getAOIProtocol()->m_nSignal, sizeof(char)*INA_SIGNALNUM);
+		memcpy(m_nSignalCurReview, getReviewProtocol()->m_nSignal, sizeof(char)*INA_SIGNALNUM);
+		m_mxSignalProcess.Unlock();
+		//Signal 감지 부분 [김태현 2018/9/10]
+		{
+			for(int i=0; i<INA_SIGNALNUM; i++)
+			{
+				if(m_nSignalCurAOI[i] == 1 && m_nSignalPreAOI[i] == 0)
+				{
+					RecvSignal(ST_AOI, i);
+				}
+			}
+			for(int i=0; i<INA_SIGNALNUM; i++)
+			{
+				if(m_nSignalCurReview[i] == 1 && m_nSignalPreReview[i] == 0)
+				{
+					RecvSignal(ST_Review, i);
+				}
+			}
+		}
+
+		//signal time off 처리 부분
+		{
+			EnterCriticalSection(&m_csSignalProcess);
+			for(int i=m_vecSignalTimeOff.size()-1; i>=0; i--)
+			{
+				if(m_vecSignalTimeOff[i].nTimeBitOff < dwTickCount)
+				{
+					*m_vecSignalTimeOff[i].pSignal = 0;
+					m_vecSignalTimeOff.erase(m_vecSignalTimeOff.begin()+i);
+				}
+				else if(*m_vecSignalTimeOff[i].pSignal == 0)
+				{
+					m_vecSignalTimeOff.erase(m_vecSignalTimeOff.begin()+i);
+				}
+			}
+			LeaveCriticalSection(&m_csSignalProcess);
+		}
+
+		memcpy(m_nSignalPreAOI, m_nSignalCurAOI, sizeof(char)*INA_SIGNALNUM);
+		memcpy(m_nSignalPreReview, m_nSignalCurReview, sizeof(char)*INA_SIGNALNUM);
+
+		Sleep(50);
+	}
+}
+
+bool akIPCNetAOISystem::SetSignal( emSystemType nSystemType, int nSignalIndex, int nTimeMS /*= 500*/ )
+{
+	char* pSignal = NULL;
+	if(nSystemType == ST_AOI)
+	{
+		pSignal = &getAOIProtocol()->m_nSignal[nSignalIndex];
+	}
+	else if(nSystemType == ST_Review)
+	{
+		pSignal = &getReviewProtocol()->m_nSignal[nSignalIndex];
+	}
+
+
+	EnterCriticalSection(&m_csSignalProcess);
+	for(int i=0; i<m_vecSignalTimeOff.size(); i++)
+	{
+		if(m_vecSignalTimeOff[i].pSignal == pSignal)
+		{
+			LeaveCriticalSection(&m_csSignalProcess);
+			return false;
+		}
+	}
+
+	_SignalTimerOff signaloff;
+	signaloff.pSignal = pSignal;
+	signaloff.nTimeBitOff = GetTickCount()+nTimeMS;
+	m_vecSignalTimeOff.push_back(signaloff);
+	LeaveCriticalSection(&m_csSignalProcess);
+
+	m_mxSignalProcess.Lock();
+	*pSignal = 1;
+	m_mxSignalProcess.Unlock();
+	
+	return true;
+}
+
+void akIPCNetAOISystem::RecvSignal( emSystemType nSystemType, int nSignal )
+{
+	if(m_pParent) m_pParent->PostMessage(UM_IPCNETAOISYSTEM, nSignal, (int)nSystemType);
+}
+

--
Gitblit v1.9.3