如何获取活动线程计数?

8

我有一个调用C++库的程序。该程序处理了大量线程(50-60个)。其中大多数似乎是在C++中创建的,我怀疑大多数都被挂起/等待。

如何找出在给定时间点有多少个活动线程?


http://msdn.microsoft.com/library/system.diagnostics.process.threads(v=VS.90).aspx - Andrey
https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-thread - Yousha Aleayoub
2个回答

15
要实际确定“活动”线程的数量,需要检查每个线程的ThreadState属性。
((IEnumerable)System.Diagnostics.Process.GetCurrentProcess().Threads)
    .OfType<System.Diagnostics.ProcessThread>()
    .Where(t => t.ThreadState == System.Diagnostics.ThreadState.Running)
    .Count();

看起来你可能需要检查一下你的 usingIEnumerable 需要 using System.Collections,这个并不总是默认包含的。OfType<T>IEnumerable 返回 IEnumerable<T>。所以如果你一开始就使用 IEnumerable<T>,那么你就不需要它了。乍一看,你的代码看起来好像能正常工作。 - Nathan
这看起来像是Java代码,不是C++。 - Aleksandr

4
你可以使用Process Explorer来检查线程。它会实时告诉你每个线程消耗了多少CPU,并且可以给出单独的堆栈跟踪,这将指示它们被阻塞在什么上面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接