SDC C-Project CF Review 프로그램
DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp
@@ -5,6 +5,7 @@
#include <process.h>
#include "DitGlassRawClient.h"
#include "GlassRawBase.h"
#include <sstream>
#ifdef _DEBUG
#undef THIS_FILE
@@ -47,18 +48,33 @@
BOOL CRawResultReader::openFile(char* pGlassID)
{
   CString strFileName;
   CDitGlassRawClient   GlassRawClient;
   GlassRawClient.ConnectServer();
   CDitGlassRawClient* pShared = &GlassRawClient;
   /*< KJG 20211208 : #3696 DEL Start >*/
   //CDitGlassRawClient   GlassRawClient;
   //GlassRawClient.ConnectServer();
   //CDitGlassRawClient* pShared = &GlassRawClient;
   _grmDefectData* pGrmStack;
   //_grmDefectData* pGrmStack;
   /*< KJG 20211208 : #3696 DEL End >*/
   strFileName.Format("%s\\%s", m_strLocalPath, pGlassID);
   FILE* pf = fopen(strFileName.GetBuffer(0), "r");
   if (pf == NULL)
      return FALSE;
   /* <KMH 20220407 : #4053 ADD Start> */
   AKLOG("Function : Read File Path: %s" , strFileName);
   /* <KMH 20220407 : #4053 ADD End> */
   /*< KJG 20211208 : #3696 ADD Start >*/
   CDitGlassRawClient   GlassRawClient;
   GlassRawClient.ConnectServer();
   CDitGlassRawClient* pShared = &GlassRawClient;
   _grmDefectData* pGrmStack;
   /*< KJG 20211208 : #3696 ADD End >*/
   std::vector<_grmDefectData> vecStackDefect;
   _grmDefectData StackDefect;
@@ -77,6 +93,21 @@
      if (strlen(buffer) <= 0 || pStr == NULL)
         break;
      /* < KJG 20220225 - #3850 ADD Start >*/
      if (strncmp(buffer, "DATA PANEL", 10) == 0)
      {
         pReadPoint = buffer;
         CString strtemp;
         pReadPoint = getParsingData(pReadPoint, 4, &strtemp);
         pReadPoint = getParsingData(pReadPoint, 5, &strtemp);
         pReadPoint = getParsingData(pReadPoint, 5, &strtemp);
         pReadPoint = getParsingData(pReadPoint, 27, &strtemp);
         pReadPoint = getParsingData(pReadPoint, 20, &strtemp);
         pReadPoint = getParsingData(pReadPoint, 20, &strtemp);
         pReadPoint = getParsingData(pReadPoint, 10, &strtemp);
         strncpy(pShared->GetGlassData()->m_strRawMergeStepID, strtemp.GetBuffer(0), 10 + 1); // Null 문자 떄문에 +1
      }
      /* < KJG 20220225 - #3850 ADD End >*/
      if (strncmp(buffer, "DATA DEFECT", 10)) continue; 
      //Defect Stack Start
@@ -125,6 +156,12 @@
            StackDefect.m_DefectJudgement = Judge_TR;
         else if (strtemp == "PR")
            StackDefect.m_DefectJudgement = Judge_PR;
         /* < KJG 20220225 - #Index ADD Start >*/
         else if (strtemp == "NG")
            StackDefect.m_DefectJudgement = Judge_NG;
         else if (strtemp == "ND")
            StackDefect.m_DefectJudgement = Judge_ND;
         /* < KJG 20220225 - #Index ADD End >*/
         else
            StackDefect.m_StackInfo = Stack_Unknown;
@@ -145,12 +182,31 @@
            StackDefect.m_StackInfo = Stack_Unknown;
         pReadPoint = getParsingData(pReadPoint, 2, &StackDefect.m_nStackStepCount);
         pReadPoint = getParsingData(pReadPoint, 60, &strtemp); // Stack Step m_strStackFirst
         strncpy(StackDefect.m_strStackFirst, strtemp.GetBuffer(0), 60);
      /* < KMH 20220712 : #4230 MOD Start > */
         //pReadPoint = getParsingData(pReadPoint, 60, &strtemp); // Stack Step m_strStackFirst
         //strncpy(StackDefect.m_strStackFirst, strtemp.GetBuffer(0), 60);
         pReadPoint = getParsingData(pReadPoint, 400, &strtemp); // Stack Step m_strStackFirst
         strncpy(StackDefect.m_strStackFirst, strtemp.GetBuffer(0), 400);
      /* < KMH 20220712 : #4230 MOD End > */
         pReadPoint = getParsingData(pReadPoint, 16, &strtemp); // ReviewImageName m_strRevImageName
         pReadPoint = getParsingData(pReadPoint, 12, &temp); // 미사용
         pReadPoint = getParsingData(pReadPoint, 12, &temp); // 미사용
         pReadPoint = getParsingData(pReadPoint, 12, &strtemp); // ZoneNum m_sZonePixelCount[i]
         stringstream ConvertZone(strtemp.GetBuffer(0));
         unsigned int nZoneHexValue;
         short sZonePixelCount[16] = { 0 };
         ConvertZone >> std::hex >> nZoneHexValue;
         for (int i = 0; i < 16; i++)
         {
            if (nZoneHexValue & 1)
            {
               sZonePixelCount[i] = 1;
            }
            nZoneHexValue = nZoneHexValue >> 1;
         }
         memcpy_s(StackDefect.m_sZonePixelCount, sizeof(StackDefect.m_sZonePixelCount), sZonePixelCount, sizeof(sZonePixelCount));
         pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_DefectSizeType
         if (strtemp == "S")
            StackDefect.m_DefectSizeType = SizeType_Small;
@@ -230,6 +286,24 @@
         else
            StackDefect.m_DefectType = DefectType_Unknown;
   
         pReadPoint = getParsingData(pReadPoint, 12, &strtemp); // Shrink
         pReadPoint = getParsingData(pReadPoint, 12, &strtemp); // ZoneClassNum m_sZoneClassPixelCount[i]
         stringstream ConvertClass(strtemp.GetBuffer(0));
         unsigned int nClassHexValue;
         short sZoneClassPixelCount[16] = { 0 };
         ConvertClass >> std::hex >> nClassHexValue;
         for (int i = 0; i < 16; i++)
         {
            if (nClassHexValue & 1)
            {
               sZoneClassPixelCount[i] = 1;
            }
            nClassHexValue = nClassHexValue >> 1;
         }
         memcpy_s(StackDefect.m_sZoneClassPixelCount, sizeof(StackDefect.m_sZoneClassPixelCount), sZoneClassPixelCount, sizeof(sZoneClassPixelCount));
         vecStackDefect.push_back(StackDefect);
      }
   }
@@ -250,7 +324,10 @@
   pShared->GetGlassData()->m_nRawMergeNum = m_vecStackDefect.size(); // RawMerge
   pShared->GetGlassData()->m_bRawMergeRead = TRUE;
   AKLOG("Import Vector Size : %d", m_vecStackDefect.size());
   /* < KJG 20220225 - #3850 MOD Start >*/
   //AKLOG("Import Vector Size : %d", m_vecStackDefect.size());
   AKLOG("Import Vector Size : [%s]%d", pShared->GetGlassData()->m_strRawMergeStepID, m_vecStackDefect.size());
   /* < KJG 20220225 - #3850 MOD End >*/
   return TRUE;
}
@@ -289,7 +366,7 @@
   return &pBuf[nLen + 1]; //구분자 건너 뛰어서 다음 읽을 포인트 넘겨준다
}
BOOL CRawResultReader::readOptionFile(char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/)
BOOL CRawResultReader::readOptionFile(char* pFileName /*= "D:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/)
{
   if (pFileName == NULL) pFileName = m_strConfigFile;
@@ -299,7 +376,9 @@
   akFileDB.getItem("RawMerge_Use", &m_bStackUse, 0);
   akFileDB.getItem("RawMerge_LocalPath", m_strLocalPath, "D:\\DIT_ResultData\\RawMerge");
   if (m_bStackUse && m_nThreadStackFileReadFlag == 0)
   //< SWK 20220413 - #4053 MOD >
//   if (/*m_bStackUse && */m_nThreadStackFileReadFlag == 0)
   if (m_nThreadStackFileReadFlag == 0)
   {
      _beginthread(threadResultFileRead, NULL, this);
   }
@@ -326,7 +405,8 @@
         nReadFailCount = 0;
         AKLOG("RawMerge File Read Start : %s\\%s", pThis->m_strLocalPath, strGlassID);
         Sleep(3000);
         //< SWK 20220413 - #4053 DEL >
//         Sleep(3000);
         while (pThis->m_nProcessState == RPS_StateFileRead && pThis->m_nThreadStackFileReadFlag == 1)
         {
            if ((nThreadCount++ % 20) != 0) //명령 수행을 빠르게 감지 위한 조치
@@ -342,30 +422,120 @@
            }
            nReadFailCount++;
            AKLOG("RawMerge File Read Try : %d", nReadFailCount);
            //< SWK 20220413 - #4053 DEL >
//            AKLOG("RawMerge File Read Try : %d", nReadFailCount);
            if (nReadFailCount > 10)
            {
               pThis->m_nProcessState = RPS_ResultReadFail;
               break;
            }
            //< SWK 20220413 - #4053 ADD >
            AKLOG("RawMerge File Read Try : %d", nReadFailCount);
            Sleep(50);
            //< SWK 20220413 - #4053 DEL >
//            Sleep(50);
         }
         if (pThis->m_nProcessState != RPS_ResultReadOK)
         {
            pThis->m_nProcessState = RPS_ResultReadFail;
         }
      }
      if (nReadFailCount)
         Sleep(500);
      /* < KMH 20220825 : #4278 MOD Start > */
      // CPU 사용증가 해결
      //if (nReadFailCount)
      //   Sleep(500);
      Sleep(500);
      /* < KMH 20220825 : #4278 MOD End > */
   }
   pThis->m_nThreadStackFileReadFlag = 0;
}
/* <LJC 20211122 : #3820 ADD Start> */
/*< SWK 20220413 - #4053 MOD Start >*/
//void CRawResultReader::ProcessResultFileRead(void * pArg)
void CRawResultReader::ProcessResultFileRead()
/*< SWK 20220413 - #4053 MOD End >*/
{
   /*< SWK 20220413 - #4053 MOD Start >*/
//   CRawResultReader* pThis = (CRawResultReader*)pArg;
//
//   pThis->m_nThreadStackFileReadFlag = 1;
//    int nReadFailCount = 0;
//    int nThreadCount = 0;
//   CString strGlassID;
//
//    while (pThis->m_nThreadStackFileReadFlag == 1)
//    {
//      if (pThis->m_nProcessState == RPS_CmdFileRead) //스택파일 읽기 수행 [김태현 2019/1/12]
//      {
//         strGlassID = pThis->m_strGlassID;
//
//         pThis->m_nProcessState = RPS_StateFileRead;
//          nThreadCount = 0;
//          nReadFailCount = 0;
//         AKLOG("RawMerge File Read Start : %s\\%s", pThis->m_strLocalPath, strGlassID);
//         Sleep(3000);
//          while (pThis->m_nProcessState == RPS_StateFileRead && pThis->m_nThreadStackFileReadFlag == 1)
//          {
//             if (pThis->openFile(strGlassID.GetBuffer(0)) == TRUE)
//             {
//                pThis->m_nProcessState = RPS_ResultReadOK;
//                AKLOG("RawMerge File Read Complete ");
//                break;
//             }
//             nReadFailCount++;
//            AKLOG("RawMerge File Read Try : %d", nReadFailCount);
//             if (nReadFailCount > 10)
//             {
//                pThis->m_nProcessState = RPS_ResultReadFail;
//                break;
//             }
//            Sleep(50);
//          }
//          if (pThis->m_nProcessState != RPS_ResultReadOK)
//          {
//             pThis->m_nProcessState = RPS_ResultReadFail;
//          }
//      }
//       if (nReadFailCount)
//          Sleep(500);
//    }
//    pThis->m_nThreadStackFileReadFlag = 0;
   m_nProcessState = RPS_StateFileRead;
   int nReadFailCount = 0;
   int nThreadCount = 0;
   AKLOG("RawMerge File Read Start : %s\\%s", m_strLocalPath, m_strGlassID);
   while (m_nProcessState == RPS_StateFileRead && m_nThreadStackFileReadFlag == 1)
   {
      if (openFile(m_strGlassID.GetBuffer(0)) == TRUE)
      {
         m_nProcessState = RPS_ResultReadOK;
         AKLOG("RawMerge File Read Complete ");
         break;
      }
      nReadFailCount++;
      if (nReadFailCount > 10)
      {
         m_nProcessState = RPS_ResultReadFail;
         break;
      }
      AKLOG("RawMerge File Read Try : %d", nReadFailCount);
   }
   if (m_nProcessState != RPS_ResultReadOK)
   {
      m_nProcessState = RPS_ResultReadFail;
   }
   /*< SWK 20220413 - #4053 MOD End >*/
}
/* <LJC 20211122 : #3820 ADD End> */
BOOL CRawResultReader::RawMergeFileReadStart(char* pGlassID)
{
   /*< SWK 20220413 - #4053 ADD Start >*/
   m_strGlassID = pGlassID;
   m_nProcessState = RPS_CmdFileRead;
   /*< SWK 20220413 - #4053 ADD End >*/
   if (m_nThreadStackFileReadFlag == 0)
   {
      _beginthread(threadResultFileRead, NULL, this);
@@ -377,12 +547,47 @@
      while (m_nProcessState == RPS_CmdFileStop) Sleep(0);
   }
   m_strGlassID = pGlassID;
   m_nProcessState = RPS_CmdFileRead;
   /*< SWK 20220413 - #4053 DEL Start >
//    m_strGlassID = pGlassID;
//    m_nProcessState = RPS_CmdFileRead;
   < SWK 20220413 - #4053 DEL End >*/
   
   return TRUE;
}
/* <LJC 20211122 : #3820 ADD Start> */
BOOL CRawResultReader::ProcessRawMergeFileReadStart(char * pGlassID)
{
   if (m_nThreadStackFileReadFlag == 0)
   {
      //< SWK 20220413 - #4053 MOD >
//      ProcessResultFileRead(this);
      ProcessResultFileRead();
   }
   /*< SWK 20220413 - #4053 MOD Start >*/
//    if (m_nProcessState == RPS_StateFileRead)
//    {
//       m_nProcessState = RPS_CmdFileStop;
//       while (m_nProcessState == RPS_CmdFileStop) Sleep(0);
//    }
//
//    m_strGlassID = pGlassID;
//    m_nProcessState = RPS_CmdFileRead;
   else
   {
      if (m_nProcessState == RPS_StateFileRead)
      {
         m_nProcessState = RPS_CmdFileStop;
         while (!(m_nProcessState == RPS_ResultReadOK || m_nProcessState == RPS_ResultReadFail)) Sleep(0);
      }
      m_strGlassID = pGlassID;
      m_nProcessState = RPS_CmdFileRead;
   }
   /*< SWK 20220413 - #4053 MOD End >*/
   return TRUE;
}
/* <LJC 20211122 : #3820 ADD End> */
BOOL CRawResultReader::RawMergeFileReadStop(BOOL bWait/*=TRUE*/)
{
   /*