From 44360bc2cdeee16be72f9cc4bfb42e0ac26b5b44 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期一, 19 一月 2026 14:47:19 +0800
Subject: [PATCH] 1.修改优化
---
SourceCode/Bond/Servo/Context.cpp | 172 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 172 insertions(+), 0 deletions(-)
diff --git a/SourceCode/Bond/Servo/Context.cpp b/SourceCode/Bond/Servo/Context.cpp
index 7fb9d06..dff60f2 100644
--- a/SourceCode/Bond/Servo/Context.cpp
+++ b/SourceCode/Bond/Servo/Context.cpp
@@ -1,12 +1,184 @@
#include "stdafx.h"
#include "Context.h"
+#include <dbghelp.h>
+
+#pragma comment(lib, "dbghelp.lib")
+void PrintStackTrace()
+{
+ void* stack[62]; // 最多抓62层
+ USHORT frames = CaptureStackBackTrace(0, 62, stack, NULL);
+
+ HANDLE process = GetCurrentProcess();
+ SymInitialize(process, NULL, TRUE);
+ for (USHORT i = 0; i < frames; ++i) {
+ DWORD64 address = (DWORD64)(stack[i]);
+ char buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME * sizeof(TCHAR)];
+ PSYMBOL_INFO symbol = (PSYMBOL_INFO)buffer;
+ symbol->SizeOfStruct = sizeof(SYMBOL_INFO);
+ symbol->MaxNameLen = MAX_SYM_NAME;
+
+ if (SymFromAddr(process, address, 0, symbol)) {
+ TRACE(">>>> name:%s\n", symbol->Name);
+ }
+ else {
+ TRACE(">>>> name:%s\n", "SymFromAddr failed");
+ }
+ }
+
+ SymCleanup(process);
+}
CContext::CContext()
{
+ m_onReleaseCallback = nullptr;
+ m_nRef = 0;
+ m_nRetCode = 0;
+ m_hEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL);
+ InitializeCriticalSection(&m_criticalSection);
}
CContext::~CContext()
{
+ if (m_hEvent != NULL) {
+ CloseHandle(m_hEvent);
+ m_hEvent = NULL;
+ }
+ DeleteCriticalSection(&m_criticalSection);
}
+
+void CContext::setOnRelease(ONRELEASECALLBACK fOnRelease)
+{
+ m_onReleaseCallback = fOnRelease;
+}
+
+int CContext::addRef()
+{
+ Lock();
+ m_nRef++;
+ Unlock();
+
+ return m_nRef;
+}
+
+int CContext::release()
+{
+ Lock();
+ if (m_nRef > 0) {
+ m_nRef--;
+ BOOL bRefCount0 = m_nRef == 0;
+ Unlock();
+
+ if (bRefCount0 && m_onReleaseCallback != nullptr) {
+ m_onReleaseCallback(this);
+ }
+ }
+ else {
+ Unlock();
+ }
+
+ return m_nRef;
+}
+
+void CContext::setRetCode(int code)
+{
+ m_nRetCode = code;
+}
+
+int CContext::getRetCode()
+{
+ return m_nRetCode;
+}
+
+void CContext::setRetMsg(const char* pszMsg)
+{
+ m_strRetMsg = pszMsg;
+}
+
+std::string& CContext::getRetMsg()
+{
+ return m_strRetMsg;
+}
+
+HANDLE CContext::getEventHandle()
+{
+ return m_hEvent;
+}
+
+void CContext::setEvent()
+{
+ if (m_hEvent != NULL) {
+ SetEvent(m_hEvent);
+ }
+}
+
+void CContext::resetEvent()
+{
+ if (m_hEvent != NULL) {
+ ResetEvent(m_hEvent);
+ }
+}
+
+void CContext::ReadString(CArchive& ar, std::string& string)
+{
+ CString strTemp;
+ ar >> strTemp;
+ string = (LPTSTR)(LPCTSTR)strTemp;
+}
+
+void CContext::WriteString(CArchive& ar, std::string& string)
+{
+ CString strTemp = string.c_str();
+ ar << strTemp;
+}
+
+void CContext::createDir(CString strDir)
+{
+ int lastIndex = 0;
+ int index = strDir.Find(_T("\\"), lastIndex);
+ while (index > 0) {
+ CString strTempDir = strDir.Left(index);
+ CreateDirectory(strTempDir, NULL);
+
+ lastIndex = index + 1;
+ index = strDir.Find(_T("\\"), lastIndex);
+ }
+ CreateDirectory(strDir, NULL);
+}
+
+BOOL CContext::IsBoxId(CString& strId)
+{
+ //'W20'开头,倒数第五位为'Z'的字符串
+ if (strId.GetLength() < 8) {
+ return FALSE;
+ }
+
+ if (strId.Left(3).Compare(_T("W20")) != 0) {
+ return FALSE;
+ }
+
+ if (strId.Right(5).GetAt(0) != (char)'Z') {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+BOOL CContext::IsLotId(CString& strId)
+{
+ //'N20'开头,倒数第五位为'Z'的字符串
+ if (strId.GetLength() < 8) {
+ return FALSE;
+ }
+
+ if (strId.Left(3).Compare(_T("N20")) != 0) {
+ return FALSE;
+ }
+
+ if (strId.Right(5).GetAt(0) != (char)'Z') {
+ return FALSE;
+ }
+
+ return TRUE;
+}
\ No newline at end of file
--
Gitblit v1.9.3