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的原因吗?
对于任何反馈,我们都表示感谢.
也许你要求太多的访问权限(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标头
| 归档时间: |
|
| 查看次数: |
5789 次 |
| 最近记录: |