From 7b3161e949bb32f91d5cebc9d52147198e360b6b Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期五, 06 六月 2025 09:03:25 +0800
Subject: [PATCH] 1.增加菜单项设置send able等信号,用于模拟测试;

---
 SourceCode/Bond/Servo/Context.cpp |   25 +++++++++++++++++++------
 1 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/SourceCode/Bond/Servo/Context.cpp b/SourceCode/Bond/Servo/Context.cpp
index 96aa4b1..d71cf34 100644
--- a/SourceCode/Bond/Servo/Context.cpp
+++ b/SourceCode/Bond/Servo/Context.cpp
@@ -4,6 +4,7 @@
 
 CContext::CContext()
 {
+	m_onReleaseCallback = nullptr;
 	m_nRef = 0;
 	m_nRetCode = 0;
 	m_hEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL);
@@ -20,6 +21,11 @@
 	DeleteCriticalSection(&m_criticalSection);
 }
 
+void CContext::setOnRelease(ONRELEASECALLBACK fOnRelease)
+{
+	m_onReleaseCallback = fOnRelease;
+}
+
 int CContext::addRef()
 {
 	Lock();
@@ -32,13 +38,20 @@
 int CContext::release()
 {
 	Lock();
-	m_nRef--;
-	BOOL bDelete = m_nRef == 0;
-	Unlock();
+	if (m_nRef > 0) {
+		m_nRef--;
+		BOOL bRefCount0 = m_nRef == 0;
+		Unlock();
 
-	int nRef = m_nRef;;
-	if (bDelete) delete this;
-	return nRef;
+		if (bRefCount0 && m_onReleaseCallback != nullptr) {
+			m_onReleaseCallback(this);
+		}
+	}
+	else {
+		Unlock();
+	}
+
+	return m_nRef;
 }
 
 void CContext::setRetCode(int code)

--
Gitblit v1.9.3