فهرست منبع

修复pExcutor被删除多次的问题导致服务崩溃的问题;

scbc.sat2 5 سال پیش
والد
کامیت
c5df76a60e
2فایلهای تغییر یافته به همراه7 افزوده شده و 5 حذف شده
  1. 2 0
      SATService/SATService/PythonExecutor.cpp
  2. 5 5
      SATService/SATService/SATExecutor.cpp

+ 2 - 0
SATService/SATService/PythonExecutor.cpp

@@ -39,6 +39,7 @@ CPythonExecutor::CPythonExecutor(void)
 
 CPythonExecutor::~CPythonExecutor(void)
 {
+	TRACE1("\t~CPythonExecutor:%p\n\n", this);
 	EndLogThread();
 	EndWorkThread();	
 }
@@ -460,6 +461,7 @@ void CPythonExecutor::EndLogThread()
 {
 	// 标记结束;
 	m_bStopLogExport = TRUE;
+	Sleep(20); // 等待关闭线程完成一次循环并退出;
 	// 同时关闭重定向的句柄;
 	EndSubprocessStdOut();
 	// 等待5秒,是否能自主结束线程;

+ 5 - 5
SATService/SATService/SATExecutor.cpp

@@ -77,13 +77,15 @@ void CSATExecutor::DelFinishedTask()
 			// 删除所有执行器对象;
 			CPythonExecutor *pExecutor = NULL;
 			for (std::vector<SATHTTP::STCase>::iterator _case = it->Job.vtCases.begin(); _case != it->Job.vtCases.end(); _case++ ) {
+				// 一般被停止的任务,才会触发下面的操作;
 				pExecutor = (CPythonExecutor *)_case->_pExcutor;
 				if ( pExecutor ) {	
-					// 结束所有工作线程;
-					pExecutor->EndThread();
 					// 释放内存;
 					delete pExecutor;
-					pExecutor = NULL;
+					_case->_pExcutor = pExecutor = NULL;
+#ifdef _DEBUG
+					TRACE2(_T("删除任务成功:%s,%s\n"), it->Job.strTaskId.c_str(), _case->strCaseName.c_str());
+#endif
 				}				
 			}
 			// 删除任务前,变更设备状态为空闲;
@@ -1225,8 +1227,6 @@ DWORD CSATExecutor::HearbeatThread(LPVOID lpVoid)
 					db process
 					*/
 				}
-				// 进行一次删除操作;
-				that->DelFinishedTask();
 			}
 		}