|  | @@ -44,6 +44,7 @@ CSATExecutor::CSATExecutor(void)
 | 
	
		
			
				|  |  |  	m_hThreadHearbeat = NULL;
 | 
	
		
			
				|  |  |  	m_hEventExcuteScript = NULL;
 | 
	
		
			
				|  |  |  	m_hThreadExcuteScript = NULL;
 | 
	
		
			
				|  |  | +	m_dwSomkingThreadId = 0;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  CSATExecutor::~CSATExecutor(void)
 | 
	
	
		
			
				|  | @@ -55,10 +56,11 @@ CSATExecutor::~CSATExecutor(void)
 | 
	
		
			
				|  |  |  bool CSATExecutor::IsTaskExist(SATHTTP::STTask &task)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	// 若是冒烟任务;
 | 
	
		
			
				|  |  | -	if ( task.taskInfo.strTaskType == "STANDARDAPKCOMPAT" ) {
 | 
	
		
			
				|  |  | +	task.taskInfo.strTaskType = "冒烟任务";
 | 
	
		
			
				|  |  | +	if ( task.taskInfo.strTaskType == "冒烟任务" ) {
 | 
	
		
			
				|  |  |  		AutoThreadSection ats(&m_csSomkingTask);
 | 
	
		
			
				|  |  |  		// 如果任务存在,删除原来的;
 | 
	
		
			
				|  |  | -		std::list<SATHTTP::STTask>::iterator it = m_vtSmokingTask.begin();
 | 
	
		
			
				|  |  | +		std::vector<SATHTTP::STTask>::iterator it = m_vtSmokingTask.begin();
 | 
	
		
			
				|  |  |  		for ( ; it != m_vtSmokingTask.end(); it++ ) {
 | 
	
		
			
				|  |  |  			// 不要使用nTaskId,这个值没啥用;//不要使用Id这个值,如果任务被停止会变更;
 | 
	
		
			
				|  |  |  			if ( it->taskInfo.nInstanceId == task.taskInfo.nInstanceId ) {
 | 
	
	
		
			
				|  | @@ -331,17 +333,14 @@ void CSATExecutor::TaskRoundSetting(SATHTTP::STTask* pTask)
 | 
	
		
			
				|  |  |  	pTask->_roundSize = pTask->vtCases.size();
 | 
	
		
			
				|  |  |  	// 获取执行轮数;
 | 
	
		
			
				|  |  |  	pTask->_roundCount = _tstol(pTask->Job.strRound.c_str());
 | 
	
		
			
				|  |  | -	if ( pTask->_roundCount > 1 )
 | 
	
		
			
				|  |  | -	{
 | 
	
		
			
				|  |  | +	if ( pTask->_roundCount > 1 ) {
 | 
	
		
			
				|  |  |  		TCHAR szValue[8] = { 0 }; 
 | 
	
		
			
				|  |  |  		// 复制一份出来,修改round值,再添加给任务;
 | 
	
		
			
				|  |  |  		std::vector<SATHTTP::STCase> vtOrgCase = pTask->vtCases;
 | 
	
		
			
				|  |  | -		for ( int i = 2; i <= pTask->_roundCount; i++ )
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | +		for ( int i = 2; i <= pTask->_roundCount; i++ ) {
 | 
	
		
			
				|  |  |  			_itoa_s(i, szValue, 10);
 | 
	
		
			
				|  |  |  			std::vector<SATHTTP::STCase> vtCase = vtOrgCase;
 | 
	
		
			
				|  |  | -			for ( std::vector<SATHTTP::STCase>::iterator it = vtCase.begin(); it != vtCase.end(); it++ )
 | 
	
		
			
				|  |  | -			{				
 | 
	
		
			
				|  |  | +			for ( std::vector<SATHTTP::STCase>::iterator it = vtCase.begin(); it != vtCase.end(); it++ ) {				
 | 
	
		
			
				|  |  |  				it->_strRoundNum = szValue;
 | 
	
		
			
				|  |  |  				pTask->vtCases.push_back(*it);
 | 
	
		
			
				|  |  |  			}			
 | 
	
	
		
			
				|  | @@ -1211,19 +1210,14 @@ int CSATExecutor::AttachTaskInfo2Buffer(SATPROTO::TaskInfo (&pbuff)[SATPROTO::MA
 | 
	
		
			
				|  |  |  	return count;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -void CSATExecutor::SmokeTaskPretreated(std::list<SATHTTP::STTask>::iterator &it)
 | 
	
		
			
				|  |  | +bool CSATExecutor::SmokeTaskPretreated(SATHTTP::STTask &task)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -	if ( it == m_vtSmokingTask.end() )
 | 
	
		
			
				|  |  | -		return;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  #ifdef _DEBUG
 | 
	
		
			
				|  |  | -	SATHTTP::STTask *pTask = (SATHTTP::STTask*)&*it;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  	//pTask->taskInfo.strSomkingCycle = _T("{ \"type\" : 0, \"day\" : 0, \"week\" : 0, \"time\" : \"20:30\" } ");
 | 
	
		
			
				|  |  | -	pTask->taskInfo.stSomkingCycle.nType = 1;
 | 
	
		
			
				|  |  | -	pTask->taskInfo.stSomkingCycle.nWeek = 0;
 | 
	
		
			
				|  |  | -	pTask->taskInfo.stSomkingCycle.nDay = 0;
 | 
	
		
			
				|  |  | -	pTask->taskInfo.stSomkingCycle.strTime = "16:05";
 | 
	
		
			
				|  |  | +	task.taskInfo.stSomkingCycle.nType = 1;
 | 
	
		
			
				|  |  | +	task.taskInfo.stSomkingCycle.nWeek = 0;
 | 
	
		
			
				|  |  | +	task.taskInfo.stSomkingCycle.nDay = 0;
 | 
	
		
			
				|  |  | +	task.taskInfo.stSomkingCycle.strTime = "16:20";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	bool bTimeIsUp = false;
 | 
	
		
			
				|  |  |  	// 获取当前日历时间(1900-01-01开始的Unix时间戳);
 | 
	
	
		
			
				|  | @@ -1234,32 +1228,32 @@ void CSATExecutor::SmokeTaskPretreated(std::list<SATHTTP::STTask>::iterator &it)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	// 获取执行时间;
 | 
	
		
			
				|  |  |  	int hour, minute;
 | 
	
		
			
				|  |  | -	sscanf_s(pTask->taskInfo.stSomkingCycle.strTime.c_str(), _T("%d:%d"), &hour, &minute);
 | 
	
		
			
				|  |  | +	sscanf_s(task.taskInfo.stSomkingCycle.strTime.c_str(), _T("%d:%d"), &hour, &minute);
 | 
	
		
			
				|  |  |  	// 是否到达指定时间;
 | 
	
		
			
				|  |  | -	if ( pTask->taskInfo.stSomkingCycle.nType == 0 ) {// 立即;
 | 
	
		
			
				|  |  | +	if ( task.taskInfo.stSomkingCycle.nType == 0 ) {// 立即;
 | 
	
		
			
				|  |  |  		bTimeIsUp = true;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	else if ( pTask->taskInfo.stSomkingCycle.nType == 1 ) {// 每天;
 | 
	
		
			
				|  |  | +	else if ( task.taskInfo.stSomkingCycle.nType == 1 ) {// 每天;
 | 
	
		
			
				|  |  |  		if ( gmtm.tm_hour == hour && gmtm.tm_min >= minute )
 | 
	
		
			
				|  |  |  			bTimeIsUp = true;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	else if ( pTask->taskInfo.stSomkingCycle.nType == 2 ) {// 每周;
 | 
	
		
			
				|  |  | -		if ( gmtm.tm_wday == pTask->taskInfo.stSomkingCycle.nWeek && gmtm.tm_hour == hour && gmtm.tm_min >= minute )
 | 
	
		
			
				|  |  | +	else if ( task.taskInfo.stSomkingCycle.nType == 2 ) {// 每周;
 | 
	
		
			
				|  |  | +		if ( gmtm.tm_wday == task.taskInfo.stSomkingCycle.nWeek && gmtm.tm_hour == hour && gmtm.tm_min >= minute )
 | 
	
		
			
				|  |  |  			bTimeIsUp = true;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	else if ( pTask->taskInfo.stSomkingCycle.nType == 3 ) {// 每月;
 | 
	
		
			
				|  |  | -		if ( gmtm.tm_mday == pTask->taskInfo.stSomkingCycle.nDay && 
 | 
	
		
			
				|  |  | -			gmtm.tm_wday == pTask->taskInfo.stSomkingCycle.nWeek && gmtm.tm_hour == hour && gmtm.tm_min >= minute )
 | 
	
		
			
				|  |  | +	else if ( task.taskInfo.stSomkingCycle.nType == 3 ) {// 每月;
 | 
	
		
			
				|  |  | +		if ( gmtm.tm_mday == task.taskInfo.stSomkingCycle.nDay && 
 | 
	
		
			
				|  |  | +			gmtm.tm_wday == task.taskInfo.stSomkingCycle.nWeek && gmtm.tm_hour == hour && gmtm.tm_min >= minute )
 | 
	
		
			
				|  |  |  			bTimeIsUp = true;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	// 到达执行时间;
 | 
	
		
			
				|  |  |  	if ( bTimeIsUp ) {
 | 
	
		
			
				|  |  |  		// 下载任务,并添加到队列中;
 | 
	
		
			
				|  |  | -		DownloadTask(*pTask);
 | 
	
		
			
				|  |  | -		// 移除;
 | 
	
		
			
				|  |  | -		it = m_vtSmokingTask.erase(it);
 | 
	
		
			
				|  |  | +		DownloadTask(task);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return bTimeIsUp;
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1294,7 +1288,7 @@ void CSATExecutor::StartWork()
 | 
	
		
			
				|  |  |  		goto clear;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	m_hThreadSomkingScript = CreateThread(NULL, 0, SomkingScriptThread, this, 0, NULL);
 | 
	
		
			
				|  |  | +	m_hThreadSomkingScript = CreateThread(NULL, 0, SomkingScriptThread, this, 0, &m_dwSomkingThreadId);
 | 
	
		
			
				|  |  |  	if ( m_hThreadSomkingScript == NULL ) {
 | 
	
		
			
				|  |  |  		goto clear;
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -1742,21 +1736,24 @@ DWORD CSATExecutor::SomkingScriptThread(LPVOID lpVoid)
 | 
	
		
			
				|  |  |  	CSATExecutor *that = (CSATExecutor*)lpVoid;
 | 
	
		
			
				|  |  |  	if ( !that ) return 0;
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  | +	int nIndex = 0;
 | 
	
		
			
				|  |  |  	// 如果任务存在,删除原来的;
 | 
	
		
			
				|  |  | -	std::list<SATHTTP::STTask>::iterator it = that->m_vtSmokingTask.end();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +	SATHTTP::STTask task;
 | 
	
		
			
				|  |  |  	do 
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  |  		AutoThreadSection ats(&that->m_csSomkingTask);
 | 
	
		
			
				|  |  | -		if ( that->m_vtSmokingTask.size() == 0 )
 | 
	
		
			
				|  |  | +		if ( that->m_vtSmokingTask.size() == 0 ) {
 | 
	
		
			
				|  |  |  			continue;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		if ( it == that->m_vtSmokingTask.end() )
 | 
	
		
			
				|  |  | -			it = that->m_vtSmokingTask.begin();
 | 
	
		
			
				|  |  | -		else 
 | 
	
		
			
				|  |  | -			it++;
 | 
	
		
			
				|  |  | -		
 | 
	
		
			
				|  |  | -		that->SmokeTaskPretreated(it);
 | 
	
		
			
				|  |  | +		if ( nIndex >= that->m_vtSmokingTask.size() )
 | 
	
		
			
				|  |  | +			nIndex = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		task = that->m_vtSmokingTask[nIndex];
 | 
	
		
			
				|  |  | +		if ( that->SmokeTaskPretreated(task) )
 | 
	
		
			
				|  |  | +			that->m_vtSmokingTask.erase(that->m_vtSmokingTask.begin()+nIndex);
 | 
	
		
			
				|  |  | +		else
 | 
	
		
			
				|  |  | +			nIndex++;
 | 
	
		
			
				|  |  |  		
 | 
	
		
			
				|  |  |  	} while (WaitForSingleObject(that->m_hEventSomkingScript, 15000) == WAIT_TIMEOUT);
 | 
	
		
			
				|  |  |  
 |