|  | @@ -22,8 +22,13 @@ bool CSATExecutor::IsTaskExist(SATHTTP::STTask &task)
 | 
	
		
			
				|  |  |  	bool found = false;
 | 
	
		
			
				|  |  |  	std::list<SATHTTP::STTask>::iterator it = m_vtTask.begin();
 | 
	
		
			
				|  |  |  	for ( ; it != m_vtTask.end(); it++ ) {
 | 
	
		
			
				|  |  | -		// 不要使用nTaskId,这个值没啥用;
 | 
	
		
			
				|  |  | -		if ( it->Id == task.Id ) {
 | 
	
		
			
				|  |  | +		// 不要使用nTaskId,这个值没啥用;//不要使用Id这个值,如果任务被停止会变更;
 | 
	
		
			
				|  |  | +		if ( it->nInstanceId == task.nInstanceId ) {
 | 
	
		
			
				|  |  | +			// 如果被中止,并变更状态为已执行;
 | 
	
		
			
				|  |  | +			if ( _tcsicmp(task.strTaskType.c_str(), "3") == 0 ) {
 | 
	
		
			
				|  |  | +				it->_nExecutionState = SATHTTP::EXECUTED;
 | 
	
		
			
				|  |  | +				it->_nExecutionResult = SATHTTP::FAIL;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  |  			found = true;
 | 
	
		
			
				|  |  |  			break;
 | 
	
		
			
				|  |  |  		}
 | 
	
	
		
			
				|  | @@ -65,14 +70,23 @@ void CSATExecutor::DelFinishedTask()
 | 
	
		
			
				|  |  |  	for ( ; it != m_vtTask.end(); it++ ) {
 | 
	
		
			
				|  |  |  		// 状态为2的完成任务;
 | 
	
		
			
				|  |  |  		if ( it->_nExecutionState == SATHTTP::EXECUTED ) {
 | 
	
		
			
				|  |  | -			GLOBAL::WriteTextLog("\n<===============================================>\nend.删除已完成任务:%s\n<===============================================>\n", it->Job.strUniqueId.c_str());
 | 
	
		
			
				|  |  |  			// 删除所有执行器对象;
 | 
	
		
			
				|  |  | +			CPythonExecutor *pExecutor = NULL;
 | 
	
		
			
				|  |  |  			for (std::vector<SATHTTP::STCase>::iterator _case = it->Job.vtCases.begin(); _case != it->Job.vtCases.end(); _case++ ) {
 | 
	
		
			
				|  |  | -				if ( _case->_pExcutor )
 | 
	
		
			
				|  |  | -					delete _case->_pExcutor;
 | 
	
		
			
				|  |  | -				_case->_pExcutor = NULL;
 | 
	
		
			
				|  |  | +				pExecutor = (CPythonExecutor *)_case->_pExcutor;
 | 
	
		
			
				|  |  | +				if ( pExecutor ) {	
 | 
	
		
			
				|  |  | +					// 结束所有工作线程;
 | 
	
		
			
				|  |  | +					pExecutor->EndThread();
 | 
	
		
			
				|  |  | +					// 释放内存;
 | 
	
		
			
				|  |  | +					delete pExecutor;
 | 
	
		
			
				|  |  | +					pExecutor = NULL;
 | 
	
		
			
				|  |  | +				}				
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | +			// 删除任务前,变更设备状态为空闲;
 | 
	
		
			
				|  |  | +			SetDeviceStatus(it->Job.strDeviceId, SATDEV::Idle);
 | 
	
		
			
				|  |  | +			// 删除任务;
 | 
	
		
			
				|  |  |  			m_vtTask.erase(it);
 | 
	
		
			
				|  |  | +			GLOBAL::WriteTextLog("\n<===============================================>\nend.删除已完成任务:%s\n<===============================================>\n", it->Job.strUniqueId.c_str());
 | 
	
		
			
				|  |  |  			break;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -159,7 +173,7 @@ void CSATExecutor::AddDevices(const SATDEV::STDevice &stDevice)
 | 
	
		
			
				|  |  |  	if ( stDevice.nStatus == SATDEV::Idle )
 | 
	
		
			
				|  |  |  		http_dev.strStatus = "0";
 | 
	
		
			
				|  |  |  	else if ( stDevice.nStatus == SATDEV::InUse )
 | 
	
		
			
				|  |  | -		http_dev.strStatus = "1";
 | 
	
		
			
				|  |  | +		http_dev.strStatus = "2";	// 注意避坑:0表示连接,即设备空闲;1表示设备断开;2表示设备繁忙
 | 
	
		
			
				|  |  |  	// 设备序列号;
 | 
	
		
			
				|  |  |  	http_dev.strDeviceSerial = stDevice.strName;
 | 
	
		
			
				|  |  |  	// 余下变量固定值;
 | 
	
	
		
			
				|  | @@ -193,7 +207,7 @@ void CSATExecutor::DelDevices(const SATDEV::STDevice &stDevice)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -void CSATExecutor::SynchDeviceStatus(std::string strDevName, SATDEV::DEVICE_USAGE_STATUS status)
 | 
	
		
			
				|  |  | +void CSATExecutor::SetDeviceStatus(std::string strDevName, SATDEV::DEVICE_USAGE_STATUS status)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	std::vector<SATHTTP::STDevice>::iterator it = m_vtDevice.begin();
 | 
	
		
			
				|  |  |  	for ( ; it != m_vtDevice.end(); it++ ) {
 | 
	
	
		
			
				|  | @@ -201,11 +215,12 @@ void CSATExecutor::SynchDeviceStatus(std::string strDevName, SATDEV::DEVICE_USAG
 | 
	
		
			
				|  |  |  			if ( status == SATDEV::Idle )
 | 
	
		
			
				|  |  |  				it->strStatus = "0";
 | 
	
		
			
				|  |  |  			else if ( status == SATDEV::InUse )
 | 
	
		
			
				|  |  | -				it->strStatus = "1";
 | 
	
		
			
				|  |  | +				it->strStatus = "2";	// 注意避坑:0表示连接,即设备空闲;1表示设备断开;2表示设备繁忙
 | 
	
		
			
				|  |  |  			break;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	// 同时,同步SATDevices的设备状态;
 | 
	
		
			
				|  |  |  	CSATDevices::SetDeviceUsageStatus(strDevName, status);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -223,6 +238,7 @@ bool CSATExecutor::IsDeviceExist(std::string strDevName)
 | 
	
		
			
				|  |  |  	return bExist;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  bool CSATExecutor::Login(std::string user, std::string password, std::string actuator, bool bLogin /*= true*/)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	std::string url = GLOBAL::g_stSATConfig.szExecuteServer;
 | 
	
	
		
			
				|  | @@ -1212,6 +1228,9 @@ DWORD CSATExecutor::ExecuteScriptThread(LPVOID lpVoid)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  				// 通知SAT服务器,脚本开始;
 | 
	
		
			
				|  |  |  				that->ReportTaskStart(pTask);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				// 将设备变更成繁忙状态;
 | 
	
		
			
				|  |  | +				that->SetDeviceStatus(pTask->Job.strDeviceId, SATDEV::InUse);
 | 
	
		
			
				|  |  |  			}	
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	} while ( WaitForSingleObject(that->m_hEventExcuteScript, 10000) == WAIT_TIMEOUT );
 |