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