微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Windows 上使用 C++ 访问最大输入延迟

如何解决在 Windows 上使用 C++ 访问最大输入延迟

我无法使用 C++ 从 Windows 性能计数器获取某些数据。我将首先说明我对 C++ 和 Windows 开发都不熟悉,但我已经在这个问题上花了一些时间,所以我对我在这里讨论的概念感到熟悉。

问题:

我如何使用 Windows PDH(性能数据助手)C++ 来获取 Max Input Delay--每个会话或每个进程?是否有某些性能计数器在 perfmon 之外不可用?

目前的进展:

我已经使用 this 示例成功记录了一些性能计数器,但我想要的那些会产生 the error code 0xC0000BB8:“在系统上找不到指定的对象。”这让我很困惑,因为我可以通过 perfmon 访问对象——“每个进程的用户输入延迟”或“每个会话的用户输入延迟”。我什至按照我在问题中链接文章中的概述启用了注册表中的计数器,尽管在 Windows 10 的构建中应该认启用它。我不得不做一些小改动才能编译代码,但我在测试期间只更改了 COUNTER_PATH 的定义,因为同样,除了我想要访问的计数器之外,代码的工作方式与宣传的一样。具体:

不编译:

CONST PWSTR COUNTER_PATH = L"\\Processor(0)\\% Processor Time";

编译并记录:

CONST wchar_t *COUNTER_PATH = L"\\Processor(0)\\% Processor Timee";

CONST PWSTR COUNTER_PATH = const_cast<PWSTR>(TEXT( "\\Processor(0)\\% Processor Time" ));

编译,但在运行时抛出错误代码 0xC0000BB8(这是我想要访问的计数器):

CONST PWSTR COUNTER_PATH = const_cast<PWSTR>(TEXT( "\\User Input Delay per Session(1)\\Max Input Delay" ));

字符串中硬编码的会话 ID 1 用于故障排除,但通配符 (*) 和 0 也用于相同的结果。计数器路径与 perfmon 中显示的匹配。

基本上,我尝试使用此代码访问的所有性能计数器(大约 5 个完全不同的计数器)都已成功记录所请求的数据,但我想访问的数据仍然是回避的。

解决方法

我在 Microsoft Q&A 上问了同样的问题并得到了答案:

有问题的性能计数器需要管理员权限才能访问。我所要做的就是在管理员命令提示符下运行这个程序,这解决了我的问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。