From 452141502b2e851ed85bd245abb3fda80fbbad48 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期三, 09 七月 2025 18:05:03 +0800
Subject: [PATCH] 新增 LoadAndProcessImages 函数,封装图像加载、界面初始化、处理线程启动流程

---
 ENRIT/View/ViewScanImage.cpp |   92 +++++++++++++++++++++++++++++++++++----------
 ENRIT/View/ViewScanImage.h   |    1 
 2 files changed, 72 insertions(+), 21 deletions(-)

diff --git a/ENRIT/View/ViewScanImage.cpp b/ENRIT/View/ViewScanImage.cpp
index 836e7cd..2ba97fb 100644
--- a/ENRIT/View/ViewScanImage.cpp
+++ b/ENRIT/View/ViewScanImage.cpp
@@ -1045,20 +1045,39 @@
 
 BOOL CViewScanImage::ManualThreadStart(int nCmd,int nIndex /*= -1*/)
 {
-	if(m_pManualProcess)
-	{
-		DWORD dwExitCode;
-		dwExitCode=::WaitForSingleObject(m_pManualProcess->m_hThread, 1000); 
-		if((::GetExitCodeThread(m_pManualProcess->m_hThread ,&dwExitCode))&& (dwExitCode == STILL_ACTIVE))
-		{
-			::TerminateThread(m_pManualProcess->m_hThread, dwExitCode);  
-
+	if (m_pManualProcess) {
+		DWORD dwWait = ::WaitForSingleObject(m_pManualProcess->m_hThread, 3000);
+		if (dwWait == WAIT_TIMEOUT) {
+			DWORD dwExitCode;
+			if ((::GetExitCodeThread(m_pManualProcess->m_hThread, &dwExitCode)) && (dwExitCode == STILL_ACTIVE)) {
+				::TerminateThread(m_pManualProcess->m_hThread, dwExitCode);
+				m_pManualProcess = NULL;
+				g_pLog->DisplayMessage(_T("Previous manual process was terminated due to timeout."));
+			}
+		}
+		else {
 			m_pManualProcess = NULL;
+			if (dwWait == WAIT_OBJECT_0) {
+				g_pLog->DisplayMessage(_T("Previous manual process completed successfully."));
+			}
+			else {
+				g_pLog->DisplayMessage(_T("Previous manual process was terminated or failed."));
+			}
 		}
 	}
-	m_nIndex		= nIndex;
-	m_nThreadCmd	= nCmd;
-	m_pManualProcess = AfxBeginThread(ManualProcessAll,this);
+
+	if (m_pManualProcess != NULL) {
+		g_pLog->DisplayMessage(_T("Manual Process is already running. Please wait until it finishes."));
+		return FALSE;
+	}
+
+	m_nIndex = nIndex;
+	m_nThreadCmd = nCmd;
+	m_pManualProcess = AfxBeginThread(ManualProcessAll, this);
+	if (!m_pManualProcess) {
+		g_pLog->DisplayMessage(_T("Failed to start manual process thread."));
+		return FALSE;
+	}
 
 	return TRUE;
 }
@@ -1260,8 +1279,46 @@
 
 		g_pLog->DisplayMessage(_T("%s %d Save Completed : %s"),PANEL_SIDE[iSide],nFrame,strPath);
 	}
+}
 
+void CViewScanImage::LoadAndProcessImages(const CString& strFolderPath)
+{
+	if (m_IV2M != NULL) {
+		// 加载图像
+		m_IV2M->IV2M_LoadImageFromFolder(-1, strFolderPath, m_pGlassData, [&](BYTE iSide) {
+			int iView = GetViewIndex(iSide);
+			InitScrollInfo(iSide, 0);
+			m_frameImg[iView].Invalidate(FALSE);
+			m_frameImg[iView].Invalidate();
+		});
 
+		for (int i = 0; i < 8; i++) {
+			InitScrollInfo(i, 0);
+
+			int nSide = GetSideIdx(i);
+			m_frameImg[i].SetSide(nSide);
+			m_frameImg[i].SetImage(GetBufferPoint(i, 0));
+			m_frameImg[i].ViewUpdate();
+		}
+
+		if (m_IV2M != NULL) {
+			m_IV2M->IV2M_InitView(VIEW_SCANIMAGE);
+		}
+
+		// 执行处理线程
+		switch (m_nShowSelect)
+		{
+		case 0:
+			m_IV2M->IV2M_InspectionProcessAll(M_CMD_PROC_ALL_START);
+			break;
+		case 1:
+			m_IV2M->IV2M_InspectionProcessAll(M_CMD_PROC_LONG_START);
+			break;
+		case 2:
+			m_IV2M->IV2M_InspectionProcessAll(M_CMD_PROC_SHORT_START);
+			break;
+		}
+	}
 }
 
 UINT CViewScanImage::ManualProcessAll(LPVOID pParam)
@@ -1286,14 +1343,6 @@
 			pDlg->m_frameImg[iView].Invalidate(FALSE);
 			pDlg->m_frameImg[iView].Invalidate();
 		});
-
-		//CString strFolderPath = _T("D:\\备份\\光检机\\EI、Rcut\\RCUT\\图片\\n8_NG");
-		//pDlg->m_IV2M->IV2M_LoadImageFromFolder(-1, strFolderPath, pDlg->m_pGlassData, [&](BYTE iSide) {
-		//	int iView = pDlg->GetViewIndex(iSide);
-		//	pDlg->InitScrollInfo(iSide, 0);
-		//	pDlg->m_frameImg[iView].Invalidate(FALSE);
-		//	pDlg->m_frameImg[iView].Invalidate();
-		//});
 	}
 	else if(pDlg->m_nThreadCmd == M_CMD_IMG_SAVE_ALL)
 	{
@@ -1385,15 +1434,16 @@
 	case 0: 
 		ManualThreadStart(M_CMD_PROC_ALL_START	);
 		break;
-
 	case 1: 
 		ManualThreadStart(M_CMD_PROC_LONG_START	); 	
 		break;
-
 	case 2:
 		ManualThreadStart(M_CMD_PROC_SHORT_START);  
 		break;
 	}
+
+	//CString strFolderPath = _T("D:\\备份\\光检机\\EI、Rcut\\RCUT\\图片\\n8_NG");
+	//LoadAndProcessImages(strFolderPath);
 }
 
 void CViewScanImage::OnBnClickedCheckAutoSize()
diff --git a/ENRIT/View/ViewScanImage.h b/ENRIT/View/ViewScanImage.h
index 04431cd..ed35659 100644
--- a/ENRIT/View/ViewScanImage.h
+++ b/ENRIT/View/ViewScanImage.h
@@ -90,6 +90,7 @@
 	static UINT		ManualProcessAll(LPVOID pParam);
 	void			SaveFullImage(int nViewIndex);
 	void			SaveFullImageAll();	
+	void			LoadAndProcessImages(const CString& strFolderPath);
 
 protected:
 	CMFCButton		m_btnLoad[MAX_PANEL_SIDE * UPDN_TYPE];

--
Gitblit v1.9.3