BeginThreadEx
是 Windows API 函數,用于創建一個新線程。當新線程執行過程中發生異常時,可以通過以下方法處理:
BeginThreadEx
的第四個參數指定一個回調函數。當新線程發生異常時,操作系統會調用此回調函數。在回調函數中,可以處理異常,例如記錄日志、清理資源等。unsigned int WINAPI ThreadProc(void* lpParam) {
// 線程執行邏輯
// ...
return 0;
}
int main() {
HANDLE hThread = BeginThreadEx(NULL, 0, ThreadProc, NULL, 0, NULL);
if (hThread == NULL) {
// 創建線程失敗,處理錯誤
return 1;
}
// 等待線程結束
WaitForSingleObject(hThread, INFINITE);
// 關閉線程句柄
CloseHandle(hThread);
return 0;
}
try-catch
語句:在 Windows平臺上,可以使用 __try
和 __except
語句捕獲線程中的異常。需要注意的是,這種方法僅適用于 C++ 代碼。DWORD WINAPI ThreadProc(LPVOID lpParam) {
__try {
// 線程執行邏輯
// ...
} __except(EXCEPTION_EXECUTE_HANDLER) {
// 處理異常
// ...
}
return 0;
}
int main() {
HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
if (hThread == NULL) {
// 創建線程失敗,處理錯誤
return 1;
}
// 等待線程結束
WaitForSingleObject(hThread, INFINITE);
// 關閉線程句柄
CloseHandle(hThread);
return 0;
}
SetUnhandledExceptionFilter
函數:在 Windows平臺上,可以使用 SetUnhandledExceptionFilter
函數設置一個全局異常過濾器。當線程發生未處理的異常時,操作系統會調用此過濾器函數。在過濾器函數中,可以處理異常,例如記錄日志、清理資源等。// 全局異常過濾器函數
LONG WINAPI UnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo) {
// 處理異常
// ...
return EXCEPTION_EXECUTE_HANDLER;
}
int main() {
// 設置全局異常過濾器
SetUnhandledExceptionFilter(UnhandledExceptionFilter);
// 創建線程
HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
if (hThread == NULL) {
// 創建線程失敗,處理錯誤
return 1;
}
// 等待線程結束
WaitForSingleObject(hThread, INFINITE);
// 關閉線程句柄
CloseHandle(hThread);
return 0;
}
請注意,這些方法僅適用于 Windows 平臺。如果使用其他操作系統,需要使用相應的異常處理機制。