OpenThread()返回NULL Win32

RCC*_*RCC 2 c++ windows winapi multithreading visual-c++

我觉得有一个明显的答案,但它一直在逃避我.我在C++中有一些遗留代码在尝试调用OpenThread()时会中断.我在Visual C++ 2008 Express Edition中运行它.程序首先获取调用线程的ThreadID,并尝试打开它,如下所示:

ThreadId threadId = IsThreaded()?thread_id ::: GetCurrentThreadId();

HANDLE threadHandle = OpenThread(THREAD_ALL_ACCESS,FALSE,threadId);

现在这是我不明白的:如果线程ID是当前线程的ID,是不是已经打开了?这可能是它返回NULL的原因吗?

对于任何反馈,我们都表示感谢.

Mic*_*urr 6

也许你要求太多的访问权限(THREAD_ALL_ACCESS),虽然我认为你对自己的主题拥有几乎所有的权限.尝试减少对您真正需要的访问权限.

什么GetLastError()回报?

更新:

看一下来自MSDN的评论:

Windows Server 2003和Windows XP/2000:THREAD_ALL_ACCESSWindows Server 2008和Windows Vista上的标志大小 增加.如果为Windows Server 2008和Windows Vista编译的应用程序在Windows Server 2003或Windows XP/2000上运行,则该THREAD_ALL_ACCESS标志太大,并且指定此标志的函数将失败 ERROR_ACCESS_DENIED.要避免此问题,请指定操作所需的最小访问权限集.如果THREAD_ALL_ACCESS必须使用,请设置_WIN32_WINNT为应用程序所针对的最小操作系统(例如, #define _WIN32_WINNT _WIN32_WINNT_WINXP).有关更多信息,请参阅使用Windows标头