【发布时间】:2011-09-28 14:30:44
【问题描述】:
我正在尝试解决旧的“How do I get a Windows Performance Counter for the current process”问题。基本上,我是 enumerating Process Object instances 来获取 Process 对象的列表,然后我可以查询它们的进程 ID 并与我自己的进行比较。
基于此,我可以使用正确的实例索引(以创建类似于\Process(my_program#3)\<counter> 的内容)构建性能计数器路径,然后我可以使用它来查询我感兴趣的任何计数器。但是如果一个会发生什么或更多其他 my_program 实例在 PdhAddCounter 调用之前退出?如果我理解正确,这意味着我的计数器路径现在指的是不同的进程或者现在无效。它们甚至可能在查询进程 ID 时消失...
如何防止计数器路径失效,然后才能使用它来获取计数器句柄?
【问题讨论】:
-
我很确定现有计数器的路径不会改变。实例可能会来来去去并最终回收标识符(以及路径),但只要您的实例存在,我很确定它将具有相同的标识符(以及路径)。如果不是这样,我会感到震惊。
-
@Luke:不幸的是,路径确实变得无效。这很容易证明,当另一个实例已经启动时,在调试器中打开程序,然后单步执行以允许程序确定正确的实例(#1),然后手动关闭第一个实例,然后再次单步执行以允许查询计数器的程序 - 它们不起作用。
标签: c++ windows performancecounter pdh