From 5424a5b168d397f58e32b2f1b95889de8c823784 Mon Sep 17 00:00:00 2001 From: kinddragon Date: Tue, 27 Apr 2010 02:03:56 +0000 Subject: Ticket #12 ([ALL] crash/hang after standby, hibernate, UAC or CTRL+ALT+DEL) partially fixed Added some threads names git-svn-id: https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@1813 10f7b99b-c216-0410-bff0-8a66a9350fd8 --- src/DSUtil/DSUtil.cpp | 28 ++++++++++++++++++++++++++++ src/DSUtil/DSUtil.h | 1 + 2 files changed, 29 insertions(+) (limited to 'src/DSUtil') diff --git a/src/DSUtil/DSUtil.cpp b/src/DSUtil/DSUtil.cpp index d43328924..b85a44638 100644 --- a/src/DSUtil/DSUtil.cpp +++ b/src/DSUtil/DSUtil.cpp @@ -2535,3 +2535,31 @@ const wchar_t *StreamTypeToName(PES_STREAM_TYPE _Type) } return NULL; } + +// +// Usage: SetThreadName (-1, "MainThread"); +// +typedef struct tagTHREADNAME_INFO +{ + DWORD dwType; // must be 0x1000 + LPCSTR szName; // pointer to name (in user addr space) + DWORD dwThreadID; // thread ID (-1=caller thread) + DWORD dwFlags; // reserved for future use, must be zero +} THREADNAME_INFO; + +void SetThreadName( DWORD dwThreadID, LPCSTR szThreadName) +{ + THREADNAME_INFO info; + info.dwType = 0x1000; + info.szName = szThreadName; + info.dwThreadID = dwThreadID; + info.dwFlags = 0; + + __try + { + RaiseException( 0x406D1388, 0, sizeof(info)/sizeof(DWORD), (DWORD*)&info ); + } + __except(EXCEPTION_CONTINUE_EXECUTION) + { + } +} \ No newline at end of file diff --git a/src/DSUtil/DSUtil.h b/src/DSUtil/DSUtil.h index e30eb3f6e..a24b8ceef 100644 --- a/src/DSUtil/DSUtil.h +++ b/src/DSUtil/DSUtil.h @@ -116,6 +116,7 @@ extern DWORD YCrCbToRGB_Rec601(BYTE A, BYTE Y, BYTE Cr, BYTE Cb); extern DWORD YCrCbToRGB_Rec709(BYTE A, BYTE Y, BYTE Cr, BYTE Cb); extern void TraceFilterInfo(IBaseFilter* pBF); extern void TracePinInfo(IPin* pPin); +extern void SetThreadName( DWORD dwThreadID, LPCSTR szThreadName); class CPinInfo : public PIN_INFO { -- cgit v1.2.3