?? cmadthreadhandler.cpp
字號:
//
// FILE: CMADThreadHandler.cpp
//
// Copyright (c) 1997 by Aaron Michael Cohen and Mike Woodring
//
/////////////////////////////////////////////////////////////////////////
#include "CMADThreadHandler.h"
#include <stdio.h>
CMclEvent CMADThreadHandler::s_MADEvent(TRUE, FALSE, "AcmeMADEvent");
LPTOP_LEVEL_EXCEPTION_FILTER CMADThreadHandler::s_pPrevUnhandledExceptionFilter = 0;
CMADThreadHandler::CMADThreadHandler( CMclEvent& ExitEvent )
: m_ExitEvent(ExitEvent)
{
s_pPrevUnhandledExceptionFilter =
SetUnhandledExceptionFilter(UnhandledExceptionFilter);
}
CMADThreadHandler::~CMADThreadHandler()
{
SetUnhandledExceptionFilter(s_pPrevUnhandledExceptionFilter);
}
unsigned CMADThreadHandler::ThreadHandlerProc( void )
{
DWORD dwWaitResult;
printf(
"[0x%08lx] MAD thread is starting.\n",
GetCurrentThreadId()
);
dwWaitResult = m_ExitEvent.WaitForTwo(s_MADEvent, FALSE, INFINITE);
if( CMclWaitSucceeded(dwWaitResult, 2) )
{
if( CMclWaitSucceededIndex(dwWaitResult) == 0 )
{
printf(
"[0x%08lx] MAD thread exiting normally.\n",
GetCurrentThreadId()
);
}
else
{
printf(
"[0x%08lx] MAD event set - terminating process.\n",
GetCurrentThreadId()
);
// Notify other threads in this process that an exception
// occurred somewhere in the product.
//
// Terminate the process.
//
exit(-1);
}
}
else
{
printf(
"[0x%08lx] MAD thread failed to execute.\n",
GetCurrentThreadId()
);
}
return(0);
}
LONG WINAPI CMADThreadHandler::UnhandledExceptionFilter( PEXCEPTION_POINTERS pExceptionInfo )
{
printf(
"[0x%08lx] MAD thread's unhandled exception filter is about to set MAD event.\n",
GetCurrentThreadId()
);
s_MADEvent.Set();
return (* s_pPrevUnhandledExceptionFilter)(pExceptionInfo);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -