【问题标题】:C or C++ Win32 How can I obtain the number of threads running in my program?C 或 C++ Win32 如何获取程序中运行的线程数?
【发布时间】:2010-04-02 01:29:00
【问题描述】:

在 Win32 上,C++ 程序如何确定我的程序进程中有多少线程处于活动状态?有 API 调用吗?

【问题讨论】:

  • 出于好奇,你需要这个做什么?
  • 这完全是另一个问题,当我了解更多信息时,我可能会在 Stackoverflow 上问这个问题。它与在运行时做出关于在多个处理器上分配数字运算和选择线程如何同步的决策有关。我不想太具体,因为我不希望答案被关于为什么不可能做我想做的事的文章弄得乱七八糟。在我弄清楚我到底想要什么之前。

标签: c++ winapi multithreading


【解决方案1】:

您可以使用Tool Help API 枚举当前正在运行的进程以及每个进程中正在运行的线程。当然,当您完成分析时,可能已经启动了更多任务和线程,而其他任务和线程可能已经结束。

【讨论】:

  • 编辑前+1 -- 后-1。为什么不为此目的使用现成的 API?您指向正确答案的进程状态链接!
  • @Jive Dadson:msdn.microsoft.com/en-us/library/ms683210(VS.85).aspx -- 虽然我认为我们都误解了这个问题。 -- 出于这个原因,删除了反对票:P
  • @Billy PSAPI 仅给出进程列表而不是线程,需要 toolhelp API 来枚举进程和线程
  • @Stephen Nutt:他没有要一份清单。他要了一个号码。该函数返回线程数。为什么需要枚举进程?
  • 我相信 PSAPI 会给你机器上的线程总数,而不是你进程中的总数。要获得该数字,您需要 ToolHelp API,并且您可以按照上面概述的方式确定数字。也可以直接使用性能计数器获取数字,但我相信在 C/C++ 中更复杂(但很容易从脚本中使用 WMI)
【解决方案2】:

使用由您的 EXE 提前加载的 DLL。计算 DLL_THREAD_ATTACH 和 DLL_THREAD_DETACH 被传递到您的 DllMain 实现的次数。

【讨论】:

  • 这是一个可爱的建议,只要在此过程中未调用 DisableThreadLibraryCalls(),它就应该起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
相关资源
最近更新 更多