Parcourir la source

双击任务列表,打开日志文件。

scbc.sat2 il y a 5 ans
Parent
commit
1b0b9c29a2

+ 48 - 35
SATHelper/SATHelper/DlgService.cpp

@@ -15,11 +15,12 @@ IMPLEMENT_DYNAMIC(CDlgService, CDialogEx)
 CDlgService::CDlgService(CWnd* pParent /*=nullptr*/)
 	: CDialogEx(IDD_DLG_SERVICE, pParent)
 {
-
+	m_bEnd = FALSE;
 }
 
 CDlgService::~CDlgService()
 {
+	m_bEnd = TRUE;
 }
 
 void CDlgService::DoDataExchange(CDataExchange* pDX)
@@ -47,6 +48,7 @@ BEGIN_MESSAGE_MAP(CDlgService, CDialogEx)
 	ON_BN_CLICKED(BTN_MI_INIT, &CDlgService::OnBnClickedMiInit)
 	ON_BN_CLICKED(BTN_SCBC_INIT, &CDlgService::OnBnClickedScbcInit)
 	ON_WM_SIZE()
+	ON_NOTIFY(NM_DBLCLK, IDC_LIST_TASK, &CDlgService::OnNMDblclkListTask)
 END_MESSAGE_MAP()
 
 
@@ -68,7 +70,7 @@ BOOL CDlgService::OnInitDialog()
 	SetTimer(1, 10000, NULL);
 #else
 	std::thread t([](CDlgService *p) {
-		while (true)
+		while (!p->m_bEnd)
 		{
 			std::this_thread::sleep_for(std::chrono::milliseconds(2500));
 			{
@@ -96,16 +98,18 @@ BOOL CDlgService::OnInitDialog()
 						p->m_listDevices.SetItemText(nIndex, 2, "掉线");
 					else if (it->nStatus == 3)
 						p->m_listDevices.SetItemText(nIndex, 2, "未认证");
-
-// 					if (it->nUsageState == 0)
-// 						p->m_listDevices.SetItemText(nIndex, 4, "空闲");
-// 					else if (it->nUsageState == 1)
-// 						p->m_listDevices.SetItemText(nIndex, 4, "繁忙");
 					nIndex++;
 				}
 			}
-			
-			std::this_thread::sleep_for(std::chrono::milliseconds(1000));
+		}
+		OutputDebugString("退出刷新设备线程\n");
+	},this);
+	t.detach();
+
+	std::thread t2([](CDlgService* p) {
+		while (!p->m_bEnd)
+		{
+			std::this_thread::sleep_for(std::chrono::milliseconds(1500));
 			{
 				CSATClient::GetInstance()->TCPQueryTasks(FALSE);
 				int nIndex = 0;
@@ -113,21 +117,24 @@ BOOL CDlgService::OnInitDialog()
 				TCHAR szValue[MAX_PATH] = { 0 };
 				for (int i = 0; i < SATData::task_resp.nSize; i++) {
 					// 任务编号;
+					p->m_ctrlTaskId.SetWindowText(_T(""));
 					p->m_ctrlTaskId.SetWindowText(SATData::task_resp.ssTasks[i].szTaskNo);
 					// 任务状态;
+					p->m_lbTaskStatus.SetWindowText(_T(""));
 					p->m_lbTaskStatus.SetWindowText(SATData::task_resp.ssTasks[i].szStatus);
 					// 脚本数量;
 					if (SATData::task_resp.ssTasks[i].nCaseSize) {
 						// 遍历出所有用例;
-						TCHAR szIndex[8] = {0};
-						for ( int k = 0; k < SATData::task_resp.ssTasks[i].nCaseSize; k++ )
+						TCHAR szIndex[8] = { 0 };
+						for (int k = 0; k < SATData::task_resp.ssTasks[i].nCaseSize; k++)
 						{
 							_itoa_s(k, szIndex, 10);
 							SATPROTO::CaseInfo& caseInfo = SATData::task_resp.ssTasks[i].ssCases[k];
 							p->m_listTask.InsertItem(nIndex, szIndex);
 							p->m_listTask.SetItemText(nIndex, 1, caseInfo.szCaseName);
-							p->m_listTask.SetItemText(nIndex, 2, caseInfo.szStatus);
-							p->m_listTask.SetItemText(nIndex, 3, caseInfo.szCaseLogPath);
+							p->m_listTask.SetItemText(nIndex, 2, caseInfo.szExecStatus);
+							p->m_listTask.SetItemText(nIndex, 3, caseInfo.szResultStatus);
+							p->m_listTask.SetItemText(nIndex, 4, caseInfo.szCaseLogPath);
 						}
 					}
 
@@ -135,8 +142,10 @@ BOOL CDlgService::OnInitDialog()
 				}
 			}
 		}
-	},this);
-	t.detach();
+
+		OutputDebugString("退出刷新任务线程\n");
+	}, this);
+	t2.detach();
 #endif
 	return TRUE;  // return TRUE unless you set the focus to a control
 				  // 异常: OCX 属性页应返回 FALSE
@@ -155,22 +164,6 @@ void CDlgService::OnPaint()
 	dc.FillRect(&rc, &brush);
 }
 
-
-HBRUSH CDlgService::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
-{
-	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
-
-	// TODO:  在此更改 DC 的任何特性
-	if (nCtlColor == CTLCOLOR_STATIC)
-	{
-		pDC->SetBkMode(TRANSPARENT);//设置背景透明
-		//pDC->SetTextColor(RGB(255, 255, 0));//设置字体为黄色
-		return (HBRUSH)::GetStockObject(NULL_BRUSH);
-	}
-	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
-	return hbr;
-}
-
 void CDlgService::InitCtrl()
 {
 	int nIndex = 0;
@@ -188,10 +181,12 @@ void CDlgService::InitCtrl()
 	m_listTask.SetColumnWidth(0, 25);
 	m_listTask.InsertColumn(1, "脚本名称");
 	m_listTask.SetColumnWidth(1, 130);
-	m_listTask.InsertColumn(2, "状态");
+	m_listTask.InsertColumn(2, "执行状态");
 	m_listTask.SetColumnWidth(2, 60);
-	m_listTask.InsertColumn(3, "日志");
-	m_listTask.SetColumnWidth(3, 55);
+	m_listTask.InsertColumn(3, "结果状态");
+	m_listTask.SetColumnWidth(3, 60);
+	m_listTask.InsertColumn(4, "日志");
+	m_listTask.SetColumnWidth(4, 55);
 	m_listTask.SetExtendedStyle(m_listTask.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
 
 	COLORREF color = RGB(0x87, 0xCE, 0xFA);
@@ -218,7 +213,6 @@ void CDlgService::InitCtrl()
 	// 设置鼠标形状;
 	m_btnAddAndroid.SetMouseCursorHand();
 
-
 	//color = RGB(0x87, 0xCE, 0xFA);
 	m_btnMIInit.m_bTransparent = FALSE;
 	m_btnMIInit.m_bDontUseWinXPTheme = TRUE;
@@ -451,3 +445,22 @@ void CDlgService::OnSize(UINT nType, int cx, int cy)
 	AdjustLayout();
 	// TODO: 在此处添加消息处理程序代码
 }
+
+
+void CDlgService::OnNMDblclkListTask(NMHDR* pNMHDR, LRESULT* pResult)
+{
+	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
+	// TODO: 在此添加控件通知处理程序代码
+	*pResult = 0;
+
+	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
+	if (pNMListView->iItem != -1)
+	{
+		CString strLogPath = m_listTask.GetItemText(pNMListView->iItem, 4);
+		// 路径不存在,退出;
+		if (!PathFileExists(strLogPath))
+			return;
+
+		ShellExecute(NULL, _T("open"), strLogPath.GetString(), NULL, NULL, SW_SHOW);
+	}
+}

+ 2 - 1
SATHelper/SATHelper/DlgService.h

@@ -21,11 +21,11 @@ protected:
 
 	DECLARE_MESSAGE_MAP()
 public:
+	BOOL m_bEnd;
 	virtual BOOL OnInitDialog();
 	CListCtrl m_listDevices;
 	CListCtrl m_listTask;
 	afx_msg void OnPaint();
-	afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
 
 	// 初始化控件;
 	void InitCtrl();
@@ -48,4 +48,5 @@ public:
 	afx_msg void OnSize(UINT nType, int cx, int cy);
 	CEdit m_ctrlTaskId;
 	CStatic m_lbTaskStatus;
+	afx_msg void OnNMDblclkListTask(NMHDR* pNMHDR, LRESULT* pResult);
 };

+ 4 - 1
SATHelper/SATHelper/MemoryClient.cpp

@@ -226,7 +226,10 @@ DWORD CMemoryClient::ThreadProc(LPVOID lpVoid)
 				}
 			}
 			pThis->Unlock();
-		} while ( WaitForSingleObject(pThis->m_hEvent, 10) == WAIT_TIMEOUT);
+		} while ( WaitForSingleObject(pThis->m_hEvent, 20) == WAIT_TIMEOUT);
+#ifdef _DEBUG
+		OutputDebugString(_T("Í˳öÄÚ´æÍ¨ÐÅ\n"));
+#endif
 	}
 
 	return 0L;

+ 1 - 0
SATHelper/SATHelper/SATHelper.cpp

@@ -146,6 +146,7 @@ BOOL CSATHelperApp::InitInstance()
 			Global::GetConfig();
 			Sleep(15000);
 		}
+		OutputDebugString(_T("刷新配置文件线程退出\n"));
 	});
 	t.detach();
 	

+ 7 - 1
SATHelper/SATHelper/UB530View.cpp

@@ -588,6 +588,9 @@ void CUB530View::CaptureMultiImage(LPCTSTR lpszDir, LPCTSTR lpszPrefix, BOOL bIs
 
 void CUB530View::CaptureSingleImageEx(LPTSTR lpszFileName, BOOL bIsJPG)
 {
+	if (m_hVideoDevice == NULL)
+		return;
+
 	// 等待截图完成;
 	std::unique_lock<std::mutex> lk(m_mut_saveImg);
 	{
@@ -608,7 +611,7 @@ void CUB530View::CaptureSingleImageEx(LPTSTR lpszFileName, BOOL bIsJPG)
 	}
 	
 	// 保存完成;
-	m_saveImg_cond.wait(lk, [&]() {return m_bSaveImage; });
+	m_saveImg_cond.wait(lk, [&]() {return m_bSaveImage; });		// 如果没有接上UB530的话,脚本运行时会导致程序退出不了(这里不返回)。
 	// 解锁;
 	lk.unlock();
 
@@ -864,6 +867,9 @@ void CUB530View::CaptureImageThread(CUB530View* pView)
 		// 解锁;
 		lk.unlock();
 	}
+#ifdef _DEBUG
+	OutputDebugString(_T("退出图片采集线程\n"));
+#endif
 }
 
 void CUB530View::StartRecord(DWORD dwDuration, LPCTSTR lpSavePath)