From 1c080b5ca821ef6e1d40025289195b18fa2973b5 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期一, 26 一月 2026 22:46:48 +0800
Subject: [PATCH] 1.把 m_bufGlass 的释放提前到 CMaster::term(),确保在 m_glassPool.term() 之前完成,避免析构时再触碰已被回收的 Glass。析构里仍保留原逻辑,若 term() 已清空则不会重复释放。
---
SourceCode/Bond/Servo/Context.h | 44 ++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/SourceCode/Bond/Servo/Context.h b/SourceCode/Bond/Servo/Context.h
index c23adcb..9e556ac 100644
--- a/SourceCode/Bond/Servo/Context.h
+++ b/SourceCode/Bond/Servo/Context.h
@@ -1,8 +1,48 @@
#pragma once
-class CContext
+#include "Common.h"
+#include <functional>
+
+
+typedef std::function<void(void*)> ONRELEASECALLBACK;
+class CContext : public IRxObject
{
public:
CContext();
- ~CContext();
+ virtual ~CContext();
+
+public:
+ void setOnRelease(ONRELEASECALLBACK fOnRelease);
+ int addRef();
+ int release();
+
+public:
+ virtual std::string& getClassName() = 0;
+ virtual std::string toString() = 0;
+ void setRetCode(int code);
+ int getRetCode();
+ void setRetMsg(const char* pszMsg);
+ std::string& getRetMsg();
+ HANDLE getEventHandle();
+ void setEvent();
+ void resetEvent();
+ static void createDir(CString strDir);
+
+protected:
+ inline void Lock() { EnterCriticalSection(&m_criticalSection); }
+ inline void Unlock() { LeaveCriticalSection(&m_criticalSection); }
+ void ReadString(CArchive& ar, std::string& string);
+ void WriteString(CArchive& ar, std::string& string);
+ static BOOL IsBoxId(CString& strId);
+ static BOOL IsLotId(CString& strId);
+
+private:
+ ONRELEASECALLBACK m_onReleaseCallback;
+ int m_nRef;
+ CRITICAL_SECTION m_criticalSection;
+
+protected:
+ int m_nRetCode;
+ std::string m_strRetMsg;
+ HANDLE m_hEvent;
};
--
Gitblit v1.9.3