|
@@ -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 );
|