From f77e8008cac062596058fca2aeddda62b80bedbf Mon Sep 17 00:00:00 2001
From: kojingeun <diteam.co.kr>
Date: 금, 14 7월 2023 17:03:10 +0900
Subject: [PATCH] Merge branch 'feature/#4517_CF_AOI_Review_결과_파일_찾기_실패_개선' into develop

---
 ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp   |   70 +++++++++++++
 ReviewSystem/ReviewSystem/ReviewSystem.vcxproj       |    2 
 ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp |  165 +++++++++++++++++++++++++--------
 ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h     |   26 +++++
 ReviewSystem/ReviewSystem/ReviewProcessor.h          |    2 
 5 files changed, 222 insertions(+), 43 deletions(-)

diff --git a/ReviewSystem/ReviewSystem/ReviewProcessor.h b/ReviewSystem/ReviewSystem/ReviewProcessor.h
index b5a7c74..e2b4678 100644
--- a/ReviewSystem/ReviewSystem/ReviewProcessor.h
+++ b/ReviewSystem/ReviewSystem/ReviewProcessor.h
@@ -161,6 +161,8 @@
 	virtual int		PostProcessWsiMultiShotResult(int nThreadIdx, SReviewResult* pReviewResult)=0;
 	virtual int		PostProcessWsiVLSIResult(int nThreadIdx, SReviewResult* pReviewResult)=0;
 	virtual int		CheckMotionComplete() = 0;
+	virtual void	FileMonitorThreadStart() = 0; /* < KJG 20230630 - #4517 ADD >*/
+	virtual void	FileMonitorThreadStop() = 0; /* < KJG 20230630 - #4517 ADD >*/
 
 	virtual CString MakeWSIImageFileName( SReviewResult* pReviewResult )=0;
 	virtual double GetCentertoOrginCoordinate(double dPosX,double dPosY,int nCornercut,int nOriginDirection)=0;
diff --git a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp
index 086a65f..7d8fa2b 100644
--- a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp
+++ b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp
@@ -12,10 +12,37 @@
 #include "CHReviewRecipe/RsRcpReviewInfo.h"
 #include "DitGlassRawClient.h"
 #include "LineChecker/LineChecker.h"
+
+#include <fstream> /* < KJG 20230630 - #4517 ADD >*/
 enum StackInfo { Stack_Unknown = 0, Stack_TD, Stack_SD, Stack_PD, Stack_SP, Stack_CD };
 using namespace CHImageControls;
 
-CReviewProcessor_CPJT::CReviewProcessor_CPJT(int nThreadCount) : CReviewProcessor(nThreadCount)
+const CString AOIRAWBIN_PATH = _T("\\\\126.100.100.1\\d\\DIT_ResultData\\RawBin");
+
+CString GetFormatMessageString(DWORD dwError) /* < KJG 20230630 - #4517 ADD >*/
+{
+	LPVOID lpMsgBuf;
+
+	FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
+		| FORMAT_MESSAGE_FROM_SYSTEM
+		| FORMAT_MESSAGE_IGNORE_INSERTS
+		, NULL
+		, dwError
+		, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)
+		, (LPTSTR)&lpMsgBuf
+		, 0
+		, NULL
+	);
+
+	CString str;
+	str.Format(_T("%s"), lpMsgBuf);
+
+	LocalFree(lpMsgBuf);
+	return str;
+}
+
+CReviewProcessor_CPJT::CReviewProcessor_CPJT(int nThreadCount) 
+	: CReviewProcessor(nThreadCount)
 {
 	bProcessSuccess[CPJT_REVIEW_SUCCESS] = FALSE;
 	bProcessSuccess[CPJT_MEASURE_SUCCESS] = FALSE;
@@ -44,6 +71,13 @@
 	ErrorStringCode[17].Insert(17,_T("CircleCoefficientFail"));
 	ErrorStringCode[18].Insert(18,_T("ProcessSuccess"));
 	ErrorStringCode[19].Insert(19,_T("ProcessNone"));
+	
+	/* < KJG 20230630 - #4517 ADD Start >*/
+	CString strDummyFilePath;
+	strDummyFilePath.Format(_T("%s\\file_dummy"), AOIRAWBIN_PATH);
+	m_threadFileMonitor.SetParam(CDisplayMessage::GetSingletonPtr(), strDummyFilePath);
+	m_threadFileMonitor.StartThread();
+	/* < KJG 20230630 - #4517 ADD End >*/
 }
 
 CReviewProcessor_CPJT::~CReviewProcessor_CPJT(void)
@@ -3897,3 +3931,37 @@
 // 	return dFocus;
 }
 
+CTimerThreadFileMonitor::CTimerThreadFileMonitor(DWORD dwPeriod /*=10000*/, int nThreadCount /*=1*/)
+	: CTimerThreadPools(dwPeriod, nThreadCount), m_pLog(nullptr)
+{
+
+}
+
+void CTimerThreadFileMonitor::TimerThreadProcess(PVOID pParameter)
+{
+	if (m_strFilePath.IsEmpty())
+		return;
+
+	std::ofstream file(m_strFilePath);
+
+	if (file.is_open())
+	{
+
+	}
+	else
+	{
+		DWORD dwError = GetLastError();
+
+		if(m_pLog)
+			m_pLog->DisplayMessage(_T("[FileMonitor Thread] Abort! Error Code[%d][%s] File Path[%s]"), dwError, GetFormatMessageString(dwError), m_strFilePath);
+
+		AfxBeginThread([](LPVOID pParam)->UINT {
+			CTimerThreadFileMonitor *pMain = static_cast<CTimerThreadFileMonitor*>(pParam);
+			pMain->StopThread();
+
+			return 0;
+		}, this);
+	}
+
+	return;
+}
\ No newline at end of file
diff --git a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h
index 6f456d3..237549c 100644
--- a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h
+++ b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h
@@ -3,6 +3,7 @@
 #include "ReviewProcessor.h"
 #include "CHEdgeTriangle/EdgeTriangle.h"
 #include "LineChecker/LineChecker.h"
+#include "CHThreadPools/TimerThreadPools.h" /* < KJG 20230630 - #4517 ADD Start >*/
 
 #define ErrorCount 20
 
@@ -14,6 +15,23 @@
 #define GLASS_SIZE_HEIGHT	2200000
 enum RPCornerCutDirection	{ RPCLeftTop=0, RPCRightTop, RPCLeftBottom,   RPCRightBottom };
 enum RPOriginDirection	{ RPOLeftTop=0, RPORightTop, RPOLeftBottom,   RPORightBottom };
+
+
+class CTimerThreadFileMonitor : public CTimerThreadPools /* < KJG 20230630 - #4517 ADD Start >*/
+{
+public:
+	explicit CTimerThreadFileMonitor(DWORD dwPeriod = 10000, int nThreadCount = 1);
+	~CTimerThreadFileMonitor() = default;
+
+	void SetParam(CDisplayMessage* pLog, CString strPath) { m_pLog = pLog; m_strFilePath = strPath; }
+
+private:
+	CDisplayMessage* m_pLog;
+	CString m_strFilePath;
+
+	void TimerThreadProcess(PVOID pParameter);
+
+};
 
 class CReviewProcessor_CPJT : public CReviewProcessor
 {
@@ -48,6 +66,9 @@
 
 	BOOL			CheckProcessSuccess(CRsRcpReviewInfo* pRsRcpReviewInfo);
 	void			ProcessSuccessReset();
+
+	void			FileMonitorThreadStart() { m_threadFileMonitor.StartThread(); } /* < KJG 20230630 - #4517 ADD Start >*/
+	void			FileMonitorThreadStop() { m_threadFileMonitor.StopThread(); } /* < KJG 20230630 - #4517 ADD Start >*/
 
 protected:
 	virtual void	WorkThreadProcess(PVOID pParameter);
@@ -111,6 +132,9 @@
 	CString m_strReviewFirst;
 	CString m_strReviewSecned;
 
+	CTimerThreadFileMonitor m_threadFileMonitor; /* < KJG 20230630 - #4517 ADD Start >*/
+
 protected:
 	CString				ErrorStringCode[ErrorCount];
-};
\ No newline at end of file
+};
+
diff --git a/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj b/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj
index ba95229..738de9a 100644
--- a/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj
+++ b/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj
@@ -123,7 +123,7 @@
       <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ResourceCompile>
     <Link>
-      <AdditionalDependencies>CHVirtualGlassMapd_x64_vc15.lib;chartdir51.lib;CHCameraControlsd_x64_vc15.lib;LineCheckerd_x64_vc15.lib;CHImageControlsd_x64_vc15.lib;CHCommonClassesd_x64_vc15.lib;CHCommonControlsd_x64_vc15.lib;CHResultFileManagerd_x64_vc15.lib;CHReviewReciped_x64_vc15.lib;CHReviewSettingd_x64_vc15.lib;CHReviewResultd_x64_vc15.lib;CHEdgeTriangled_x64_vc15.lib;CHPathSchedulerd_x64_vc15.lib;CHMotorCalibratord_x64_vc15.lib;CHAutoLightControlsd_x64_vc15.lib;CHAlignFinderd_x64_vc15.lib;CHThreadPoolsd_x64_vc15.lib;CHReviewResultParserd_x64_vc15.lib;CHReviewDefectFinderd_x64_vc15.lib;CHReviewPrioritySorterd_x64_vc15.lib;CHDefectPickerd_x64_vc15.lib;IOCPNetworkd_x64_vc15.lib;CHMotorControlsd_x64_vc15.lib;CHLensChangeControlsd_x64_vc15.lib;CHLightControlsd_x64_vc15.lib;CHAfmControlsd_x64_vc15.lib;CHSignalControlsd_x64_vc15.lib;CHVcrControlsd_x64_vc15.lib;CHWsiControlsd_x64_vc15.lib;CHTotalPitchMeasured_x64_vc15.lib;M_AutoDiagnosisManagerd_x64_vc17.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>CHVirtualGlassMapd_x64_vc15.lib;chartdir51.lib;CHCameraControlsd_x64_vc15.lib;LineCheckerd_x64_vc15.lib;CHImageControlsd_x64_vc15.lib;CHCommonClassesd_x64_vc15.lib;CHCommonControlsd_x64_vc15.lib;CHResultFileManagerd_x64_vc15.lib;CHReviewReciped_x64_vc15.lib;CHReviewSettingd_x64_vc15.lib;CHReviewResultd_x64_vc15.lib;CHEdgeTriangled_x64_vc15.lib;CHPathSchedulerd_x64_vc15.lib;CHMotorCalibratord_x64_vc15.lib;CHAutoLightControlsd_x64_vc15.lib;CHAlignFinderd_x64_vc15.lib;CHThreadPoolsd_x64_vc15.lib;CHReviewResultParserd_x64_vc15.lib;CHReviewDefectFinderd_x64_vc15.lib;CHReviewPrioritySorterd_x64_vc15.lib;CHDefectPickerd_x64_vc15.lib;IOCPNetworkd_x64_vc15.lib;CHMotorControlsd_x64_vc15.lib;CHLensChangeControlsd_x64_vc15.lib;CHLightControlsd_x64_vc15.lib;CHAfmControlsd_x64_vc15.lib;CHSignalControlsd_x64_vc15.lib;CHVcrControlsd_x64_vc15.lib;CHWsiControlsd_x64_vc15.lib;CHTotalPitchMeasured_x64_vc15.lib;M_AutoDiagnosisManagerd_x64_vc17.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <AdditionalLibraryDirectories>../lib;../../Internal_Library/lib;../../External_Library/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <SubSystem>Windows</SubSystem>
diff --git a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
index 4885de2..196109e 100644
--- a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
+++ b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -40,6 +40,11 @@
 #include <fstream>
 #include <afxwin.h>
 
+#include <sstream> /* < KJG 20230605 - #4517 ADD >*/ 
+#include <filesystem> /* < KJG 20230605 - #4517 ADD >*/ 
+
+namespace fs = std::experimental::filesystem::v1; /* < KJG 20230605 - #4517 ADD >*/ 
+
 
 #define GLASS_GD_FILE_PATH			_T("GD")
 #define SIGNAL_SEND_RESULT_SUCCESS	_T("OK")
@@ -955,6 +960,10 @@
 	//SetUploadResultFailCount(0);
 
 	bFileFind = FALSE;
+	
+	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] FileMonitor Thread Stop Ready"));
+	m_pSP2P->ISP2P_GetReviewProcessor()->FileMonitorThreadStop(); /* < KJG 20230630 - #4517 ADD Start >*/
+	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] FileMonitor Thread Stop Complete"));
 
 	/*< LYW 20211109 - #3662 Delete Start >*/
 	//m_pSP2P->ISP2P_GetDiagnosisHistory();
@@ -1888,7 +1897,10 @@
 	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
 // 	if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewUnloadingAck_CPJT))
 // 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Unloading Ack!"));
-	
+
+	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] FileMonitor Thread Start Ready"));
+	m_pSP2P->ISP2P_GetReviewProcessor()->FileMonitorThreadStart(); /* < KJG 20230630 - #4517 ADD Start >*/
+	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] FileMonitor Thread Start Complete"));
 }
 
 
@@ -2895,6 +2907,18 @@
 
 BOOL CSequenceProcessor_CPJT::FindRawBinFile(CString strFileName)
 {
+	/* < KJG 20230605 - #4517 ADD Start >*/
+	auto FuncStringSplit = [](string Sentence, char Separator, vector<string>& vec)
+	{
+		stringstream ss(Sentence);
+		string tmp;
+
+		while (getline(ss, tmp, Separator)) {
+			vec.push_back(tmp);
+		}
+	};
+	/* < KJG 20230605 - #4517 ADD End >*/
+
 	//210128
 	CString strFilePath = _T("");
 	//pData->GetGlassData()->m_strFileName;
@@ -2916,60 +2940,121 @@
 			//#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER START
 			if (nReTryTime%2 == 0)
 			{
-				strFilePath = AOIRAWBIN_PATH;
+				strFilePath = AOIRAWBIN_NETWORK_DRIVE_PATH;
 			}
-			else strFilePath = AOIRAWBIN_NETWORK_DRIVE_PATH;
+			else strFilePath = AOIRAWBIN_PATH;
 
-			strWild.Format("%s\\%s_*.bin", strFilePath, strFileName);
-			 akFileFinder.FindFile(strWild.GetBuffer(0), FALSE);
-			//LYW LOG
-			g_pLog->DisplayMessage(_T("[GlassLoading][FindRawBinFile] Find Path = %s, RetryCount = %d, ResultCode = [%d]"), strFilePath, 30-nReTryTime, GetLastError());
-			//#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER END
-			VECFINDDATA* pFindData = akFileFinder.getFindData();
-			int nFileNamePos = strlen(akFileFinder.getProcessPath());
-			std::map<LONGLONG, CString> mapSpanFileName;
-			for (int i = 0; i < pFindData->size(); i++)
+			//strWild.Format("%s\\%s_*.bin", strFilePath, strFileName); /* < KJG 20230605 - #4517 DEL >*/
+			//akFileFinder.FindFile(strWild.GetBuffer(0), FALSE); /* < KJG 20230605 - #4517 DEL >*/
+
+			/* < KJG 20230605 - #4517 ADD Start >*/
+			auto timeStart = chrono::steady_clock::now();
+			g_pLog->DisplayMessage(_T("[GlassLoading][FindRawBinFile] Start Find Path = %s, File Name = %s, TryCount = %d"), strFilePath, strFileName, 30 - nReTryTime);
+
+			std::error_code err;
+			vector<std::string> vtFileList;
+			fs::path pathBinFile(strFilePath.GetBuffer(0));
+			int constexpr SaperatorCount = 4, DateSize = 8, TimeSize = 6; // GLASSID_STEPID_'YYYYMMDD'_'HHMMSS' �룷留� �솗�씤
+			for (auto iter = fs::directory_iterator(pathBinFile, err); iter != fs::directory_iterator(); iter++)
 			{
-				char* pFileName = &((*pFindData)[i]).name[nFileNamePos];
+				fs::path p = iter->path();
+				if (p.filename().stem().string().find(strFileName) != string::npos)
 				{
-					CakParser parser;
-					parser.process(pFileName, "_.");
-					if (parser.getTokNum() < 4) continue;
-					
-					if (parser.getTokNum() >= 6) continue; // 0401
-
-					int nDataTime[8] = {};
+					std::string strSearchFile = p.filename().stem().string();
+					if (p.extension().string() == _T(".bin"))
 					{
-						int nTokIndex = 0;
-						const char* pGlassId = parser.getTokStr(nTokIndex++);
-						const char* pStepId = parser.getTokStr(nTokIndex++);
-						char* pDate = &pFileName[parser.getTokPos(nTokIndex++)];
-						char* pTime = &pFileName[parser.getTokPos(nTokIndex++)];
-
-						nDataTime[0] = (pDate[0] - '0') * 1000 + (pDate[1] - '0') * 100 + (pDate[2] - '0') * 10 + (pDate[3] - '0') * 1;
-						nDataTime[1] = (pDate[4] - '0') * 10 + (pDate[5] - '0') * 1;
-						nDataTime[2] = (pDate[6] - '0') * 10 + (pDate[7] - '0') * 1;
-						nDataTime[3] = (pTime[0] - '0') * 10 + (pTime[1] - '0') * 1;
-						nDataTime[4] = (pTime[2] - '0') * 10 + (pTime[3] - '0') * 1;
-						nDataTime[5] = (pTime[4] - '0') * 10 + (pTime[5] - '0') * 1;
+						vtFileList.push_back(p.filename().stem().string());
 					}
-
-					CTime tmTemp(nDataTime[0], nDataTime[1], nDataTime[2], nDataTime[3], nDataTime[4], nDataTime[5]);
-					CTimeSpan tmSpan = tmReviewLoading - tmTemp;
-					mapSpanFileName.insert(std::make_pair(tmSpan.GetTotalSeconds(), pFileName));
 				}
 			}
 
-			if (mapSpanFileName.empty() == FALSE)
+			for (auto iter = vtFileList.begin(); iter != vtFileList.end(); ) 
 			{
-				if (mapSpanFileName.begin()->first < nCloseTime)
+				vector<string> vtSplit;
+				FuncStringSplit(*iter, _T('_'), vtSplit);
+
+				if (vtSplit.size() == SaperatorCount && vtSplit[2].size() == DateSize && vtSplit[3].size() == TimeSize)
 				{
-					strFindFile = mapSpanFileName.begin()->second;
+					iter++;
+				}
+				else
+				{
+					vtFileList.erase(iter);
+				}
+			}
+
+			sort(vtFileList.begin(), vtFileList.end(), greater<>()); // 理쒖떊�닚�쑝濡� �젙�젹
+
+			string strPickFileName = vtFileList.empty() ? _T("NULL") : vtFileList.front();
+			g_pLog->DisplayMessage(_T("[GlassLoading][FindRawBinFile] End File Count = %d, Pick File Name = %s, Tact = %d, ErrorCode = %d, ErrorMsg = %s"), vtFileList.size(), strPickFileName.c_str(), chrono::duration_cast<chrono::milliseconds>(chrono::steady_clock::now() - timeStart).count(),err.value(), err.message().c_str());
+
+			if (vtFileList.empty() == FALSE)
+			{
+				vector<string> vtSplit;
+				FuncStringSplit(strPickFileName, _T('_'), vtSplit);
+				
+				CTime tmTemp(stoi(vtSplit[2].substr(0, 4)), stoi(vtSplit[2].substr(4, 2)), stoi(vtSplit[2].substr(6, 2)), stoi(vtSplit[3].substr(0, 2)), stoi(vtSplit[3].substr(2, 2)), stoi(vtSplit[3].substr(4, 2)));
+				CTimeSpan tmSpan = tmReviewLoading - tmTemp;
+				
+				if (tmSpan < nCloseTime)
+				{
+					strFindFile = strPickFileName.c_str();
+					g_pLog->DisplayMessage(_T("[GlassLoading][FindRawBinFile] Find File Success"));
 					break;
 				}
 			}
+			/* < KJG 20230605 - #4517 ADD End >*/
 
-			akFileFinder.clear();
+			/* < KJG 20230605 - #4517 DEL Start >*/ 
+			//#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER END
+			//VECFINDDATA* pFindData = akFileFinder.getFindData();
+			//int nFileNamePos = strlen(akFileFinder.getProcessPath());
+			//std::map<LONGLONG, CString> mapSpanFileName;
+			//for (int i = 0; i < pFindData->size(); i++)
+			//{
+			//	char* pFileName = &((*pFindData)[i]).name[nFileNamePos];
+			//	{
+			//		CakParser parser;
+			//		parser.process(pFileName, "_.");
+			//		if (parser.getTokNum() < 4) continue;
+			//		
+			//		if (parser.getTokNum() >= 6) continue; // 0401
+			//
+			//		int nDataTime[8] = {};
+			//		{
+			//			int nTokIndex = 0;
+			//			const char* pGlassId = parser.getTokStr(nTokIndex++);
+			//			const char* pStepId = parser.getTokStr(nTokIndex++);
+			//			char* pDate = &pFileName[parser.getTokPos(nTokIndex++)];
+			//			char* pTime = &pFileName[parser.getTokPos(nTokIndex++)];
+			//
+			//			nDataTime[0] = (pDate[0] - '0') * 1000 + (pDate[1] - '0') * 100 + (pDate[2] - '0') * 10 + (pDate[3] - '0') * 1;
+			//			nDataTime[1] = (pDate[4] - '0') * 10 + (pDate[5] - '0') * 1;
+			//			nDataTime[2] = (pDate[6] - '0') * 10 + (pDate[7] - '0') * 1;
+			//			nDataTime[3] = (pTime[0] - '0') * 10 + (pTime[1] - '0') * 1;
+			//			nDataTime[4] = (pTime[2] - '0') * 10 + (pTime[3] - '0') * 1;
+			//			nDataTime[5] = (pTime[4] - '0') * 10 + (pTime[5] - '0') * 1;
+			//		}
+			//
+			//		CTime tmTemp(nDataTime[0], nDataTime[1], nDataTime[2], nDataTime[3], nDataTime[4], nDataTime[5]);
+			//		CTimeSpan tmSpan = tmReviewLoading - tmTemp;
+			//		mapSpanFileName.insert(std::make_pair(tmSpan.GetTotalSeconds(), pFileName));
+			//	}
+			//}
+			//
+			//if (mapSpanFileName.empty() == FALSE)
+			//{
+			//	if (mapSpanFileName.begin()->first < nCloseTime)
+			//	{
+			//		strFindFile = mapSpanFileName.begin()->second;
+			//		break;
+			//	}
+			//}
+			//
+			//akFileFinder.clear();
+			/* < KJG 20230605 - #4517 DEL End >*/
+
+
 			Sleep(100);
 		}
 	}

--
Gitblit v1.9.3