|  | @@ -133,10 +133,6 @@ DWORD CScriptExecutor::_LogExportThread(LPVOID lpParam)
 | 
	
		
			
				|  |  |  		} while (!that->m_bStopLogExport);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	// 关闭线程句柄;
 | 
	
		
			
				|  |  | -	CloseHandle(that->m_hLogThread);
 | 
	
		
			
				|  |  | -	that->m_hLogThread = NULL;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  	// 结束重定向;
 | 
	
		
			
				|  |  |  	that->EndSubprocessStdOut();
 | 
	
		
			
				|  |  |  	GLOBAL::WriteTextLog(_T("脚本日志线程结束,用例名=%s"), that->m_pCaseObj->strCaseName.c_str());
 | 
	
	
		
			
				|  | @@ -407,6 +403,11 @@ int CScriptExecutor::RunEmbeddedScript()
 | 
	
		
			
				|  |  |  	Sleep(2000);
 | 
	
		
			
				|  |  |  	// 结束日志线程;
 | 
	
		
			
				|  |  |  	m_bStopLogExport = TRUE;
 | 
	
		
			
				|  |  | +	// 同时需要关闭输出的管道,否则ReadFile会阻塞;
 | 
	
		
			
				|  |  | +	CloseHandle(m_hStdOutWrite);
 | 
	
		
			
				|  |  | +	m_hStdOutWrite = NULL;
 | 
	
		
			
				|  |  | +	CloseHandle(m_hStdErrorWrite);
 | 
	
		
			
				|  |  | +	m_hStdErrorWrite = NULL;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	Py_DECREF(pResult);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -468,6 +469,11 @@ int CScriptExecutor::RunScriptProcess()
 | 
	
		
			
				|  |  |  	GLOBAL::WriteTextLog("脚本进程结束(%ld)",  m_pi.dwProcessId);
 | 
	
		
			
				|  |  |  	// 结束日志线程;
 | 
	
		
			
				|  |  |  	m_bStopLogExport = TRUE;
 | 
	
		
			
				|  |  | +	// 同时需要关闭输出的管道,否则ReadFile会阻塞;
 | 
	
		
			
				|  |  | +	CloseHandle(m_hStdOutWrite);
 | 
	
		
			
				|  |  | +	m_hStdOutWrite = NULL;
 | 
	
		
			
				|  |  | +	CloseHandle(m_hStdErrorWrite);
 | 
	
		
			
				|  |  | +	m_hStdErrorWrite = NULL;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	// 关闭进程句柄. 
 | 
	
		
			
				|  |  |  	CloseHandle(m_pi.hProcess);
 | 
	
	
		
			
				|  | @@ -625,6 +631,11 @@ int CScriptExecutor::ServiceRunScriptProcess()
 | 
	
		
			
				|  |  |  	// 关闭进程句柄. 
 | 
	
		
			
				|  |  |  	CloseHandle(m_pi.hProcess);
 | 
	
		
			
				|  |  |  	CloseHandle(m_pi.hThread);
 | 
	
		
			
				|  |  | +	// 同时需要关闭输出的管道,否则ReadFile会阻塞;
 | 
	
		
			
				|  |  | +	CloseHandle(m_hStdOutWrite);
 | 
	
		
			
				|  |  | +	m_hStdOutWrite = NULL;
 | 
	
		
			
				|  |  | +	CloseHandle(m_hStdErrorWrite);
 | 
	
		
			
				|  |  | +	m_hStdErrorWrite = NULL;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	// 重置;
 | 
	
		
			
				|  |  |  	memset(&m_si, 0, sizeof(m_si));
 | 
	
	
		
			
				|  | @@ -1043,12 +1054,11 @@ void CScriptExecutor::StopScript()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  bool CScriptExecutor::IsScriptOver()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -	if ( WaitForSingleObject(m_hLogThread, 0) == WAIT_OBJECT_0 )
 | 
	
		
			
				|  |  | +	if ( WaitForSingleObject(m_hLogThread, 0) == WAIT_OBJECT_0  && WaitForSingleObject(m_hWorkThread, 0) == WAIT_OBJECT_0)
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  | -		GLOBAL::WriteTextLog(_T("脚本(%s)已完成"), m_pCaseObj->strCaseName.c_str());
 | 
	
		
			
				|  |  | +		GLOBAL::WriteTextLog(_T("====>脚本(%s)已完成"), m_pCaseObj->strCaseName.c_str());
 | 
	
		
			
				|  |  |  		return true;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	GLOBAL::WriteTextLog(_T("脚本(%s)未完成"), m_pCaseObj->strCaseName.c_str());
 | 
	
		
			
				|  |  |  	return false;
 | 
	
		
			
				|  |  |  }
 |