如何从向量异常处理程序的异常指针中获取线程ID?
获取SEH异常触发线程的ID方法
VEH(向量异常处理)的回调函数是在抛出异常的线程上下文中执行的,你不需要额外判断,直接在VehHandler里调用GetCurrentThreadId()就能拿到异常发生的线程ID。
修正后的代码示例
LONG WINAPI VehHandler(PEXCEPTION_POINTERS exceptionInfo) { DWORD exceptionThreadId = GetCurrentThreadId(); // 这里的exceptionThreadId就是触发异常的线程ID,直接使用即可 // Do Something // 根据需求返回对应的处理结果,比如继续搜索其他异常处理程序 return EXCEPTION_CONTINUE_SEARCH; }
区分主线程与异常线程的场景
如果需要判断异常是否来自非主线程,可以提前在主线程初始化时保存主线程ID,再在处理函数中对比:
// 全局变量或类成员变量,在主线程启动时赋值 DWORD g_mainThreadId; LONG WINAPI VehHandler(PEXCEPTION_POINTERS exceptionInfo) { DWORD exceptionThreadId = GetCurrentThreadId(); if (exceptionThreadId != g_mainThreadId) { // 处理非主线程触发的异常逻辑 } return EXCEPTION_CONTINUE_SEARCH; } // 主线程初始化时执行 void InitMainThreadId() { g_mainThreadId = GetCurrentThreadId(); }
内容的提问来源于stack exchange,提问作者Batmon
相关产品推荐
相关产品推荐

