Added sleep_ms() and check_debugger() functions + moved various auxiliary macros into the MUtils library.
This commit is contained in:
parent
4d41d882da
commit
3676070821
@ -55,3 +55,11 @@ while(0)
|
|||||||
throw std::runtime_error((MESSAGE)); \
|
throw std::runtime_error((MESSAGE)); \
|
||||||
} \
|
} \
|
||||||
while(0)
|
while(0)
|
||||||
|
|
||||||
|
#define MUTILS_THROW_FMT(MESSAGE, ...) do \
|
||||||
|
{ \
|
||||||
|
char _message[256]; \
|
||||||
|
_snprintf_s(_message, 256, _TRUNCATE, (MESSAGE), __VA_ARGS__); \
|
||||||
|
throw std::runtime_error(_message); \
|
||||||
|
} \
|
||||||
|
while(0)
|
||||||
|
@ -101,25 +101,12 @@ namespace MUtils
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#define MUTILS_DELETE(PTR) do \
|
//Delete helper
|
||||||
{ \
|
#define MUTILS_DELETE(PTR) do { if((PTR)) { delete (PTR); (PTR) = NULL; } } while(0)
|
||||||
if((PTR)) \
|
#define MUTILS_DELETE_ARRAY(PTR) do { if((PTR)) { delete [] (PTR); (PTR) = NULL; } } while(0)
|
||||||
{ \
|
|
||||||
delete (PTR); \
|
|
||||||
(PTR) = NULL; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
while(0)
|
|
||||||
|
|
||||||
#define MUTILS_DELETE_ARRAY(PTR) do \
|
//Zero memory
|
||||||
{ \
|
#define MUTILS_ZERO_MEMORY(PTR) memset(&(PTR), 0, sizeof((PTR)))
|
||||||
if((PTR)) \
|
|
||||||
{ \
|
|
||||||
delete [] (PTR); \
|
|
||||||
(PTR) = NULL; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
while(0)
|
|
||||||
|
|
||||||
//String conversion macros
|
//String conversion macros
|
||||||
#define MUTILS_WCHR(STR) (reinterpret_cast<const wchar_t*>((STR).utf16()))
|
#define MUTILS_WCHR(STR) (reinterpret_cast<const wchar_t*>((STR).utf16()))
|
||||||
|
@ -123,6 +123,12 @@ namespace MUtils
|
|||||||
//Message handler
|
//Message handler
|
||||||
MUTILS_API bool handle_os_message(const void *const message, long *result);
|
MUTILS_API bool handle_os_message(const void *const message, long *result);
|
||||||
|
|
||||||
|
//Sleep
|
||||||
|
MUTILS_API void sleep_ms(const size_t &duration);
|
||||||
|
|
||||||
|
//Check if debugger is present
|
||||||
|
MUTILS_API void check_debugger(void);
|
||||||
|
|
||||||
//Error handling
|
//Error handling
|
||||||
MUTILS_API void fatal_exit(const wchar_t* const errorMessage);
|
MUTILS_API void fatal_exit(const wchar_t* const errorMessage);
|
||||||
}
|
}
|
||||||
|
@ -609,6 +609,59 @@ bool MUtils::OS::handle_os_message(const void *const message, long *result)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// SLEEP
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void MUtils::OS::sleep_ms(const size_t &duration)
|
||||||
|
{
|
||||||
|
Sleep((DWORD) duration);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// DEBUGGER CHECK
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#if (!(MUTILS_DEBUG))
|
||||||
|
static __forceinline bool is_debugger_present(void)
|
||||||
|
{
|
||||||
|
__try
|
||||||
|
{
|
||||||
|
CloseHandle((HANDLE)((DWORD_PTR)-3));
|
||||||
|
}
|
||||||
|
__except(1)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL bHaveDebugger = FALSE;
|
||||||
|
if(CheckRemoteDebuggerPresent(GetCurrentProcess(), &bHaveDebugger))
|
||||||
|
{
|
||||||
|
if(bHaveDebugger) return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return IsDebuggerPresent();
|
||||||
|
}
|
||||||
|
static __forceinline bool check_debugger_helper(void)
|
||||||
|
{
|
||||||
|
if(is_debugger_present())
|
||||||
|
{
|
||||||
|
MUtils::OS::fatal_exit(L"Not a debug build. Please unload debugger and try again!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define check_debugger_helper() (false)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void MUtils::OS::check_debugger(void)
|
||||||
|
{
|
||||||
|
check_debugger_helper();
|
||||||
|
}
|
||||||
|
|
||||||
|
static volatile bool g_debug_check = check_debugger_helper();
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// FATAL EXIT
|
// FATAL EXIT
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -104,6 +104,7 @@ int MUtils::Startup::startup(int &argc, char **argv, main_function_t *const entr
|
|||||||
__try
|
__try
|
||||||
{
|
{
|
||||||
MUtils::ErrorHandler::initialize();
|
MUtils::ErrorHandler::initialize();
|
||||||
|
MUtils::OS::check_debugger();
|
||||||
iResult = startup_helper(argc, argv, entry_point);
|
iResult = startup_helper(argc, argv, entry_point);
|
||||||
}
|
}
|
||||||
__except(1)
|
__except(1)
|
||||||
@ -113,6 +114,7 @@ int MUtils::Startup::startup(int &argc, char **argv, main_function_t *const entr
|
|||||||
}
|
}
|
||||||
#else //_MSCVER
|
#else //_MSCVER
|
||||||
MUtils::ErrorHandler::initialize();
|
MUtils::ErrorHandler::initialize();
|
||||||
|
MUtils::OS::check_debugger();
|
||||||
iResult = startup_helper(argc, argv, entry_point);
|
iResult = startup_helper(argc, argv, entry_point);
|
||||||
#endif //_MSCVER
|
#endif //_MSCVER
|
||||||
#endif //MUTILS_DEBUG
|
#endif //MUTILS_DEBUG
|
||||||
|
Loading…
Reference in New Issue
Block a user