소스 검색

!2 fix the problem which creates system event's thread twice.

chenliangyu 1 년 전
부모
커밋
742509a7dd
3개의 변경된 파일55개의 추가작업 그리고 18개의 파일을 삭제
  1. 11 1
      Module/mod_chromium/CWebsocketServer.cpp
  2. 10 11
      Module/mod_chromium/mod_chromium.cpp
  3. 34 6
      Module/mod_chromium/mod_chromium.h

+ 11 - 1
Module/mod_chromium/CWebsocketServer.cpp

@@ -1223,9 +1223,19 @@ namespace Chromium {
 			auto signatureID = msg.getSignatureID();
 			if (sendArr.size() == 0)
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("message_from_socket event sendArr.size() == 0");
-			else if(signatureID != eMsgSig_LogInfo && signatureID != eMsgSig_EntityStatus && signatureID != eMsgSig_PerformanceList)//fiter guiconsole msg
+			else if (signatureID != eMsgSig_LogInfo && signatureID != eMsgSig_EntityStatus && signatureID != eMsgSig_PerformanceList)//fiter guiconsole msg
+			{
+#ifdef DEVOPS_ON_ST /*DevOps流水线编译,ST环境*/
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("message_from_socket event %s send to arr:%s"
+					, unaccurate_js.c_str(), formatVectorToString(sendArr).c_str());
+#elif defined(DEVOPS_ON_UAT)/*DevOps流水线编译,UAT环境*/
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("message_from_socket event %s send to arr:%s"
 					, unaccurate_js.c_str(), formatVectorToString(sendArr).c_str());
+#else
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("message_from_socket event send to arr:%s", formatVectorToString(sendArr).c_str());
+#endif
+			}
+				
 
 		}
 		else if (MessageType::EndSession == msg.getMessageType())	//session end

+ 10 - 11
Module/mod_chromium/mod_chromium.cpp

@@ -434,8 +434,6 @@ namespace Chromium {
 					boost::thread(boost::bind(SaveCefclientLog, magicStr)).detach();
 				}
 #endif
-
-				boost::thread(boost::bind(&CChromiumEntity::DoWithSysVarEvent, this)).detach();//用于处理sysvar,避免由于阻塞动作,导致实体卡住,lost
 		}
 		if (m_withSpecialTest)
 		{
@@ -689,6 +687,7 @@ namespace Chromium {
 
 #endif
 			OnPreStart_Init(m_strArgs, m_pTransactionContext);//初始化部分, perf ,killchromium, signal, get custom url
+			boost::thread(boost::bind(&CChromiumEntity::DoWithSysVarEvent, this)).detach();//用于处理sysvar,避免由于阻塞动作,导致实体卡住,lost
 			if (!OnPreStart_socketStart(m_strArgs, m_pTransactionContext)) {//OnPreStart_socketStart()->new CWebsocketServer(strStructPath, this) 时间过长
 				return;
 			}
@@ -823,7 +822,7 @@ namespace Chromium {
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("create thread:%s", __FUNCTION__);
 		while (true)
 		{
-			if (m_eventArr.empty())
+			if (m_eventArr.size() == 0)
 			{
 				boost::this_thread::sleep_for(boost::chrono::microseconds(100));
 				continue;
@@ -874,19 +873,19 @@ namespace Chromium {
 								CSimpleStringA cmd = CSimpleStringA::Format("sudo kill -9 %d", it);
 								DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CloseCommonPage %s", cmd.GetData());
 								system(cmd.GetData());
-					}
+							}
 #else
 							CModTools::get_mutable_instance().StopChromiumBrowser(ERR_PAGE_REASON::startup);
 #endif
 
 							//DbgEx("UnregistSysVarEvent TerminalStage %s", Error_Succeed == GetFunction()->UnregistSysVarEvent("TerminalStage") ? "success" : "fail");
-				}
-			}
+						}
+					}
 					catch (const std::exception& e)
 					{
 						DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("TerminalStage:A run exception, %s", e.what());
 					}
-		}
+				}
 				else if (0 == CSimpleStringA("X").Compare(curEvent.value.c_str(), true))
 					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("TerminalStage X, do nothing.");
 				else
@@ -963,10 +962,10 @@ namespace Chromium {
 	{
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("OnSysVarEvent %s, old->new:%s->%s", pszKey, pszOldValue, pszValue);
 		SYS_EVENT_PARAM curEvent;
-		curEvent.key = pszKey;
-		curEvent.value = pszValue;
-		curEvent.oldValue = pszOldValue;
-		curEvent.entityName = pszEntityName;
+		curEvent.key = std::string(pszKey);
+		curEvent.value = std::string(pszValue);
+		curEvent.oldValue = std::string(pszOldValue);
+		curEvent.entityName = std::string(pszEntityName);
 		boost::unique_lock<boost::mutex> eventArrLock(m_eventContorl);
 		m_eventArr.push_back(curEvent);
 

+ 34 - 6
Module/mod_chromium/mod_chromium.h

@@ -15,7 +15,6 @@
 #include "../mod_ResourceWatcher/ResourceWatcher_msg_g.h"
 #include "Chromium_server_g.h"
 #include <boost/thread/mutex.hpp>
-#include <boost/container/deque.hpp> //不知为什么,vs2010中std::deque没有函数提示
 
 //#define TEST_FUNCTION
 
@@ -42,12 +41,41 @@ namespace Chromium {
 	#define BROWSER_TIMER_ID 0xF002
 	#define BROWSER_TIMER_INTERVAL 3600000
 
-	typedef struct {
+	struct SYS_EVENT_PARAM
+	{
 		std::string key;
 		std::string value;
 		std::string oldValue;
 		std::string entityName;
-	}SYS_EVENT_PARAM;
+
+		// 默认构造函数
+		SYS_EVENT_PARAM() = default;
+
+		// 带参数的构造函数
+		SYS_EVENT_PARAM(const std::string& k, const std::string& v, const std::string& ov, const std::string& en)
+			: key(k), value(v), oldValue(ov), entityName(en) {}
+
+		// 拷贝构造函数
+		SYS_EVENT_PARAM(const SYS_EVENT_PARAM& other)
+			: key(other.key), value(other.value), oldValue(other.oldValue), entityName(other.entityName) {}
+
+		// 拷贝赋值运算符
+		SYS_EVENT_PARAM& operator=(const SYS_EVENT_PARAM& other) {
+			if (this != &other) {
+				key = other.key;
+				value = other.value;
+				oldValue = other.oldValue;
+				entityName = other.entityName;
+			}
+			return *this;
+		}
+
+		// 禁用移动构造函数
+		SYS_EVENT_PARAM(SYS_EVENT_PARAM&&) = delete;
+
+		// 禁用移动赋值运算符
+		SYS_EVENT_PARAM& operator=(SYS_EVENT_PARAM&&) = delete;
+	};
 
 
 	class CChromiumEntity;
@@ -134,12 +162,14 @@ namespace Chromium {
 		bool m_withConsole;
 		bool m_withSpecialTest/*开启一些终端功能的测试*/, m_withLinkLog/*开启链路中的中间链路日志*/;
 		bool m_withMin, m_withClose, m_installMode;
-		boost::container::deque<SYS_EVENT_PARAM> m_eventArr;
+		std::deque<SYS_EVENT_PARAM> m_eventArr;
+		//boost::container::deque<SYS_EVENT_PARAM> m_eventArr;
 		boost::mutex m_eventContorl, m_eventConditionMu; //sysvarEvent变化时阻塞修改
 		boost::mutex m_commonPageLock;//
 		boost::condition_variable_any m_eventCondition;//满足有数据时激活线程
 		CAutoArray<CSimpleStringA> m_strArgs;
 		CSmartPointer<ITransactionContext> m_pTransactionContext;
+		
 #ifdef RVC_OS_LINUX
 		std::map<std::string, std::vector<int>> m_commonPageArr;
 #endif
@@ -180,8 +210,6 @@ namespace Chromium {
 			//SP_MSG_HANDLE_NS_EX(HealthManager, TerminalManager, HealthManager::TerminalManager, OnTerminalManage)
 			//SP_END_ENTITY_MSG()
 			SP_END_MSG_DISPATCH_MAP()
-
-
 	};
 }
 #endif