소스 검색

vtSomkingTask入队前,先进行m_vtTask遍历,查询任务是否在m_vtTasK,若存在不入队列。

scbc 5 년 전
부모
커밋
064c40fd57
1개의 변경된 파일12개의 추가작업 그리고 1개의 파일을 삭제
  1. 12 1
      SATService/SATService/SATExecutor.cpp

+ 12 - 1
SATService/SATService/SATExecutor.cpp

@@ -71,8 +71,16 @@ bool CSATExecutor::IsTaskExist(SATHTTP::STTask &task)
 
 		// 再将任务添加入队列;
 		if ( _tcsicmp(task.taskInfo.strTaskType.c_str(), "3") != 0 ) {
+			bool bExsit = false;
+			AutoThreadSection ats(&m_csTask);
+			for ( std::list<SATHTTP::STTask>::iterator it = m_vtTask.begin(); it != m_vtTask.end(); it++ ) {
+				if ( it->taskInfo.nInstanceId == task.taskInfo.nInstanceId )
+					bExsit = true;
+			}
+
 			// 被中止的任务不入队;
-			m_vtSmokingTask.push_back(task);
+			if ( !bExsit )
+				m_vtSmokingTask.push_back(task);
 		}
 		
 		return true;
@@ -80,6 +88,7 @@ bool CSATExecutor::IsTaskExist(SATHTTP::STTask &task)
 
 	// 实时任务;
 	bool found = false;
+	AutoThreadSection ats(&m_csTask);
 	std::list<SATHTTP::STTask>::iterator it = m_vtTask.begin();
 	for ( ; it != m_vtTask.end(); it++ ) {
 		// 不要使用nTaskId,这个值没啥用;//不要使用Id这个值,如果任务被停止会变更;
@@ -134,6 +143,7 @@ void CSATExecutor::DownloadTask(SATHTTP::STTask &task)
 
 SATHTTP::STTask* CSATExecutor::IsThereATaskInProcess()
 {
+	AutoThreadSection ats(&m_csTask);
 	std::list<SATHTTP::STTask>::iterator it = m_vtTask.begin();
 	for ( ; it != m_vtTask.end(); it++ ) {
 		// 执行中的任务;
@@ -147,6 +157,7 @@ SATHTTP::STTask* CSATExecutor::IsThereATaskInProcess()
 
 SATHTTP::STTask* CSATExecutor::GetFreeTask()
 {
+	AutoThreadSection ats(&m_csTask);
 	std::list<SATHTTP::STTask>::iterator it = m_vtTask.begin();
 	for ( ; it != m_vtTask.end(); it++ ) {
 		// 未执行的任务;