mirror of
https://github.com/yuanyuanxiang/SimpleRemoter.git
synced 2026-01-22 07:14:15 +08:00
style: Change files encoding format to UTF8-BOM
This commit is contained in:
@@ -1,41 +1,41 @@
|
||||
#include "stdafx.h"
|
||||
#include "stdafx.h"
|
||||
#include "SafeThread.h"
|
||||
#include <stdexcept>
|
||||
#include <map>
|
||||
|
||||
// RoutineInfo <EFBFBD><EFBFBD>¼<EFBFBD>߳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ.
|
||||
// RoutineInfo 记录线程相关信息.
|
||||
typedef struct RoutineInfo {
|
||||
DWORD tid; // <EFBFBD>߳<EFBFBD>ID
|
||||
DWORD tid; // 线程ID
|
||||
|
||||
LPTHREAD_START_ROUTINE Func; // <EFBFBD>̺߳<EFBFBD><EFBFBD><EFBFBD>
|
||||
LPVOID Param; // <EFBFBD>̲߳<EFBFBD><EFBFBD><EFBFBD>
|
||||
LPTHREAD_START_ROUTINE Func; // 线程函数
|
||||
LPVOID Param; // 线程参数
|
||||
|
||||
OnException Excep; // <EFBFBD>쳣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LPVOID User; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
OnException Excep; // 异常处理函数
|
||||
LPVOID User; // 额外参数
|
||||
|
||||
std::string File; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵߳<EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
int Line; // <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::string Name; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool Trace; // <EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::string File; // 创建线程的文件
|
||||
int Line; // 文件行数
|
||||
std::string Name; // 函数名称
|
||||
bool Trace; // 追踪线程运行情况
|
||||
|
||||
} RoutineInfo;
|
||||
|
||||
DWORD HandleCppException(RoutineInfo& ri)
|
||||
{
|
||||
try {
|
||||
return ri.Func(ri.Param); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>̺߳<EFBFBD><EFBFBD><EFBFBD>
|
||||
return ri.Func(ri.Param); // 调用实际线程函数
|
||||
} catch (const std::exception& e) {
|
||||
if (ri.Excep) {
|
||||
Mprintf("[%d] <EFBFBD><EFBFBD><EFBFBD><EFBFBD> C++ <EFBFBD>쳣: %s. [%s:%d]\n", ri.tid, e.what(), ri.File.c_str(), ri.Line);
|
||||
Mprintf("[%d] 捕获 C++ 异常: %s. [%s:%d]\n", ri.tid, e.what(), ri.File.c_str(), ri.Line);
|
||||
return ri.Excep(ri.User, ri.Param);
|
||||
}
|
||||
Mprintf("[%d] <EFBFBD><EFBFBD><EFBFBD><EFBFBD> C++ <EFBFBD>쳣: %s. û<EFBFBD><EFBFBD><EFBFBD>ṩ<EFBFBD>쳣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[%s:%d]!\n", ri.tid, e.what(), ri.File.c_str(), ri.Line);
|
||||
Mprintf("[%d] 捕获 C++ 异常: %s. 没有提供异常处理程序[%s:%d]!\n", ri.tid, e.what(), ri.File.c_str(), ri.Line);
|
||||
} catch (...) {
|
||||
if (ri.Excep) {
|
||||
Mprintf("[%d] <EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ֪ C++ <EFBFBD>쳣. [%s:%d]\n", ri.tid, ri.File.c_str(), ri.Line);
|
||||
Mprintf("[%d] 捕获未知 C++ 异常. [%s:%d]\n", ri.tid, ri.File.c_str(), ri.Line);
|
||||
return ri.Excep(ri.User, ri.Param);
|
||||
}
|
||||
Mprintf("[%d] <EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ֪ C++ <20>쳣. û<><C3BB><EFBFBD>ṩ<EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[%s:%d]!\n", ri.tid, ri.File.c_str(), ri.Line);
|
||||
Mprintf("[%d] 捕获未知 C++ 异常. 没有提供异常处理程序[%s:%d]!\n", ri.tid, ri.File.c_str(), ri.Line);
|
||||
}
|
||||
return 0xDEAD0002;
|
||||
}
|
||||
@@ -43,19 +43,19 @@ DWORD HandleCppException(RoutineInfo& ri)
|
||||
DWORD HandleSEHException(RoutineInfo & ri)
|
||||
{
|
||||
__try {
|
||||
// ִ<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>̺߳<EFBFBD><EFBFBD><EFBFBD>
|
||||
// 执行实际线程函数
|
||||
return HandleCppException(ri);
|
||||
} __except (EXCEPTION_EXECUTE_HANDLER) {
|
||||
if (ri.Excep) {
|
||||
Mprintf("[%d] <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>쳣<EFBFBD><EFBFBD><EFBFBD>̲߳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. [%s:%d] Code=%08X\n", ri.tid, ri.File.c_str(), ri.Line, GetExceptionCode());
|
||||
Mprintf("[%d] 捕获硬件异常,线程不会崩溃. [%s:%d] Code=%08X\n", ri.tid, ri.File.c_str(), ri.Line, GetExceptionCode());
|
||||
return ri.Excep(ri.User, ri.Param);
|
||||
}
|
||||
Mprintf("[%d] <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>쳣. û<><C3BB><EFBFBD>ṩ<EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[%s:%d]! Code=%08X\n", ri.tid, ri.File.c_str(), ri.Line, GetExceptionCode());
|
||||
return 0xDEAD0001; // <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
Mprintf("[%d] 捕获硬件异常. 没有提供异常处理程序[%s:%d]! Code=%08X\n", ri.tid, ri.File.c_str(), ri.Line, GetExceptionCode());
|
||||
return 0xDEAD0001; // 返回错误状态
|
||||
}
|
||||
}
|
||||
|
||||
// ͨ<EFBFBD><EFBFBD><EFBFBD>쳣<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 通用异常包装函数
|
||||
DWORD WINAPI ThreadWrapper(LPVOID lpParam)
|
||||
{
|
||||
RoutineInfo *ri = (RoutineInfo *)lpParam;
|
||||
@@ -65,21 +65,21 @@ DWORD WINAPI ThreadWrapper(LPVOID lpParam)
|
||||
|
||||
if (pRealThreadFunc.Trace) {
|
||||
CAutoLog Log(pRealThreadFunc.Name.c_str());
|
||||
// <EFBFBD>쳣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 异常捕获
|
||||
return HandleSEHException(pRealThreadFunc);
|
||||
}
|
||||
// <EFBFBD>쳣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 异常捕获
|
||||
return HandleSEHException(pRealThreadFunc);
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣߳<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵߳<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 创建带异常保护的线程,记录创建线程的文件、行数和函数名称
|
||||
HANDLE CreateSafeThread(const char*file, int line, const char* fname, OnException excep, LPVOID user, SIZE_T dwStackSize,
|
||||
LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId)
|
||||
{
|
||||
|
||||
if (excep) assert(user); // <EFBFBD>쳣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<EFBFBD>ṩ
|
||||
if (excep) assert(user); // 异常处理函数和参数必须同时提供
|
||||
if (excep && !user) {
|
||||
Mprintf("[ERROR] <EFBFBD>ṩ<EFBFBD><EFBFBD><EFBFBD>쳣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> user Ϊ NULL, <EFBFBD>ܾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>[%s:%d]!\n", file, line);
|
||||
Mprintf("[ERROR] 提供了异常处理函数但 user 为 NULL, 拒绝创建线程[%s:%d]!\n", file, line);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ HANDLE CreateSafeThread(const char*file, int line, const char* fname, OnExceptio
|
||||
|
||||
HANDLE hThread = ::CreateThread(NULL, dwStackSize, ThreadWrapper, ri, dwCreationFlags, lpThreadId);
|
||||
if (!hThread) {
|
||||
Mprintf("[ERROR] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>GetLastError=%lu [%s:%d]\n", GetLastError(), file, line);
|
||||
Mprintf("[ERROR] 创建线程失败:GetLastError=%lu [%s:%d]\n", GetLastError(), file, line);
|
||||
delete ri;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user