Microsoft批准的设置线程名称的方法无法在启用/ EHsc的情况下编译。编译器告诉我
C2712:无法在需要对象展开的函数中使用__try
http://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx
//
// 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)
{
}
}
如何在不更改编译器设置的情况下解决此问题?
在WinXP上使用Visual Studio 2008
答案 0 :(得分:1)
通常的解决方案是将它分成两个函数,一个调用另一个函数。一个设置SEH __try/__except
块,另一个设置所有与C ++异常和本地变量的析构函数调用相关的东西。
但是我没有看到任何需要析构函数调用的类型。
也许这只是一个错字(except
)vs(__except
)?