Prechádzať zdrojové kódy

修复当UB530未接上时,脚本运行会导致SATHelper退出不了(线程卡死)。

scbc.sat2 5 rokov pred
rodič
commit
60d91bb1ae
1 zmenil súbory, kde vykonal 13 pridanie a 0 odobranie
  1. 13 0
      SATHelper/SATHelper/UB530View.cpp

+ 13 - 0
SATHelper/SATHelper/UB530View.cpp

@@ -548,6 +548,9 @@ std::string CUB530View::CaptureSingleImageAutoName(LPCTSTR lpszDir, BOOL bIsJPG)
 
 void CUB530View::CaptureMultiImage(LPCTSTR lpszDir, LPCTSTR lpszPrefix, BOOL bIsJPG, int nDurationTime)
 {
+	if (m_hVideoDevice == NULL)
+		return;
+
 	std::thread t([&](CUB530View* p, LPCTSTR lpszDir, LPCTSTR lpszPrefix, BOOL bIsJPG, int nDurationTime) {
 		// 连续截图;
 		TCHAR szDir[MAX_PATH] = { 0 };
@@ -619,6 +622,9 @@ void CUB530View::CaptureSingleImageEx(LPTSTR lpszFileName, BOOL bIsJPG)
 
 std::string CUB530View::CaptureSingleImageAutoNameEx(LPCTSTR lpszDir, BOOL bIsJPG)
 {
+	if (m_hVideoDevice == NULL)
+		return std::string();
+
 	// 等待截图完成;
 	std::unique_lock<std::mutex> lk(m_mut_saveImg);
 	{
@@ -681,6 +687,9 @@ std::string CUB530View::CaptureSingleImageAutoNameEx(LPCTSTR lpszDir, BOOL bIsJP
 
 void CUB530View::CaptureMultiImageEx(LPCTSTR lpszDir, LPCTSTR lpszPrefix, BOOL bIsJPG, int nDurationTime)
 {
+	if (m_hVideoDevice == NULL)
+		return;
+
 	std::thread t([&](CUB530View* p, LPCTSTR lpszDir, LPCTSTR lpszPrefix, BOOL bIsJPG, int nDurationTime) {
 		// 连续截图;
 		TCHAR szDir[MAX_PATH] = { 0 };
@@ -849,6 +858,10 @@ void CUB530View::CaptureImageThread(CUB530View* pView)
 {
 	CString strFileName = _T("");
 	while (!pView->m_bAppQuit) {
+		if (pView->m_hVideoDevice == NULL) {
+			Sleep(1000);
+			continue;
+		}
 		std::unique_lock<std::mutex> lk(pView->m_mut_thread);   // 这里使用unique_lock是为了后面方便解锁
 #if 1	// 线程等待唤醒(避免线程虚假唤醒);
 		pView->m_thread_cond.wait(lk, [&]() {return pView->m_pBuffer; });