我有与进程关联的processID。我使用CreateProcess()
函数创建了此过程。在运行期间,我想跟踪它运行的处理器数量以及此可执行文件在多核计算机上使用的时间。
我想写同样的C ++代码;谁可以帮我这个事?
我正在使用Win XP多核计算机。
答案 0 :(得分:1)
答案 1 :(得分:0)
您可以使用Windows事件跟踪(ETW)和CSwitch事件(在每个上下文切换时发出)在Vista或更高版本上捕获此级别的详细信息。
各种工具(例如Windows Performance Toolkit)捕获并可视化此数据。
但是,Windows XP不支持此功能。
如果您只是想知道您的典型并发性(即在给定时间运行了多少线程),您可以定期对perfmon线程数据进行采样(来自HKEY_PERFORMANCE_DATA)。 “线程状态”计数器将为您提供进程中每个线程的即时状态(即每个线程是否正在运行)。显然,这个抽样过程会将最大并发数限制为(处理器数量-1)。
但你真的需要这么多细节吗? GetProcessTimes通常就足够了。
<强>更新强>
您可以在测试计算机上运行应用程序,只需使用perfmon测量每个CPU的利用率。您还应该测量每个进程的CPU利用率,以确保没有其他任何进程意外运行。
要捕获报告的数据,请以管理员身份运行perfmon。
就是这样。