首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenThread()通过不同的线程号?

OpenThread()通过不同的线程号?
EN

Stack Overflow用户
提问于 2010-05-31 21:52:19
回答 1查看 1.8K关注 0票数 0

我对用OpenThread函数打开不同的线程和用NtQueryInformationThread本机函数检查它们感到困惑。我对NtQueryInformationThread没有问题&我可以很好地检查它们。问题是我不知道如何使用OpenThread (考虑到SetDebugPrivilege )遍历不同数量的线程。假设我们有从5100到5200的不同线程&我们想按顺序检查它们:例如5100、5101、5102、5103、5104、5105...5200...我不知道如何在delphi中正确地使用OpenThread函数。我正在使用这个语法&我发现它是错误的:

代码语言:javascript
复制
OpenThread(THREAD_ALL_ACCESS,false,(DWORD)5100)

。如果有人能指导我如何使用OpenThread通过不同数量的线程,那就太好了。

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-01 00:21:17

我不确定你是如何获得具有严格顺序‘d的线程的,因为Windows不(必须)以任何模式获取线程’d。

如果您希望遍历一组线程,则必须使用工具帮助API:

  1. 调用CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0)以获取系统状态快照,并使用Thread32FirstThread32Next循环遍历线程,然后选择要使用的线程(例如。
  2. 使用带有适当访问掩码的OpenThread,例如:THREAD_QUERY_INFORMATION

不要使用THREAD_ALL_ACCESS,除非您在当前进程中创建了线程,并且您确切地知道自己在做什么

(如果您接触另一个进程的线程,请将自己限制为只读访问)

  • 可以做您想做的事情,例如。call NtQueryInformationThread

  • 不要忘记call

只要不持有线程句柄,就必须处理任何线程终止(并被具有相同ID的新线程替换)的可能性。

编辑(应请求进一步澄清)

带有dwFlags == TH32CS_SNAPTHREADCreateToolhelp32Snapshot为您提供了当前存在的所有线程的系统范围的快照(在本例中忽略了th32ProcessID参数),而不管它们的状态如何,并且Thread32[First|Next]随后返回的THREADENTRY32结构包含th32ThreadIDth32OwnerProcessID字段,您可以使用它们来标识线程。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2943959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档