如何使用查询性能计数器?

2023-12-24

我最近决定需要将 Timer 类的使用毫秒改为微秒,经过一番研究后,我认为 QueryPerformanceCounter 可能是我最安全的选择。 (警告Boost::Posix它可能无法在 Win32 API 上运行,这让我有点失望)。但是,我不太确定如何实施它。

我正在做的就是打电话GetTicks()我正在使用 esque 函数并将其分配给计时器startingTicks多变的。然后为了找到经过的时间量,我只需从函数的返回值中减去startingTicks,当我重置计时器时,我只需再次调用该函数并为其分配startingTicks。不幸的是,从我看到的代码来看,它并不像调用那么简单QueryPerformanceCounter(),而且我不确定我应该传递什么作为它的参数。


#include <windows.h>

double PCFreq = 0.0;
__int64 CounterStart = 0;

void StartCounter()
{
    LARGE_INTEGER li;
    if(!QueryPerformanceFrequency(&li))
    cout << "QueryPerformanceFrequency failed!\n";

    PCFreq = double(li.QuadPart)/1000.0;

    QueryPerformanceCounter(&li);
    CounterStart = li.QuadPart;
}
double GetCounter()
{
    LARGE_INTEGER li;
    QueryPerformanceCounter(&li);
    return double(li.QuadPart-CounterStart)/PCFreq;
}

int main()
{
    StartCounter();
    Sleep(1000);
    cout << GetCounter() <<"\n";
    return 0;
}

这个程序应该输出一个接近 1000 的数字(windows sleep 不太准确,但应该类似于 999)。

The StartCounter()函数记录性能计数器的滴答数CounterStart多变的。这GetCounter()函数返回自此以来的毫秒数StartCounter()最后被称为双精度,所以如果GetCounter()返回 0.001 那么自此以来已经过去了大约 1 微秒StartCounter()被称为。

如果你想让计时器使用秒,那么改变

PCFreq = double(li.QuadPart)/1000.0;

to

PCFreq = double(li.QuadPart);

或者如果你想要微秒然后使用

PCFreq = double(li.QuadPart)/1000000.0;

但实际上它是为了方便,因为它返回一个双精度值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用查询性能计数器? 的相关文章

随机推荐

  • 设置带有“free”刻度的分类轴标签 ggplot2

    我正在尝试使用 R 3 1 1 中的 ggplot2 包 1 0 1 和 scales free 在分面图中的分类轴上设置标签 如果我在没有手动设置轴刻度标签的情况下进行绘图 它们会正确显示 第一个图 但是当我尝试设置标签 第二个图 时 两
  • Spring Cloud Stream Kafka Streams Binder KafkaException:无法启动流:“监听器”不能为空

    我是 Kafka Streams 和 Spring Cloud Stream 的新手 但在将集成相关代码移至属性文件中方面阅读过有关它的好文章 以便开发人员可以主要关注事物的业务逻辑方面 这里我有我的简单应用程序类 package com
  • 从插件模块读取 dll.config (不是 app.config!)

    我正在编写一个 C NET 2 0 dll 它是一个插件更大的应用 https en wikipedia org wiki AutoCAD 我的模块的 Visual Studio 项目有一个 app config 文件 该文件与 MyPro
  • 在 unix/linux shell 中进行模式匹配时如何使用反通配符或负通配符?

    假设我想复制目录的内容 不包括名称中包含 音乐 一词的文件和文件夹 cp exclude matches Music target directory 应该用什么来代替 exclude matches 来实现此目的 在 Bash 中 您可以
  • git 嵌套存储库 - 子模块、符号链接、其他

    我正在尝试使用 git 设置我的 Zend Framework 开发环境 或更重要的是我的目录结构 然而 我的根本问题实际上与所涉及的特定库无关 但更重要的是如何让 git 完成我想要的事情 我的项目根目录是 home jsuggs pro
  • 如何在应用 后获取 BitmapImage 字节

    这个 BitmapSource originalImage byte originalPixels originalPixels new byte int originalImage Width int originalImage Heig
  • 在python中通过xml.etree.ElementTree生成的xml文件中插入换行符

    我在 python 中使用 xml etree ElementTree 创建了一个 xml 文件 然后我用 tree write filename UTF 8 将文档写出到文件中 但是当我使用文本编辑器打开文件名时 标签之间没有换行符 一切
  • 经纬度转为时区

    有谁知道是否有任何现有的解决方案可以从一个点 经度 纬度 确定时区 我可以对这个项目所需的一些内容进行硬编码 但最好使用预先构建的解决方案 thanks 使用 Web 服务 例如由geonames http www geonames org
  • 在 RowSort 操作后执行操作

    我有一个JTable and a TableRowSorter我想在排序完成后执行操作 我一直在浏览网络 但到目前为止我还没有什么运气 最初我以为只是一个RowSorterListener可以解决这个问题 但不幸的是它在排序完成后不会执行该
  • 在 JAVA 中验证 JSON 字符串对象格式的最佳方法是什么

    我想验证字符串对象是否是有效的 json 对象 无论其数据正确性如何 换句话说 这个 json 字符串的格式正确吗 例如 我得到 abc 123 cba 233 该过程应返回格式异常 abc 123 cba 233 应该给予相同的 您可能认
  • MSIL检查

    我有一些字节格式的 MSIL 反射的 GetMethodBody 的结果 我想对其进行一些分析 我想在 MSIL 中找到使用 new 运算符创建的所有类 关于如何以编程方式做到这一点有什么想法吗 我最终在这里使用了 MSIL 解析器 htt
  • 在Linux上编写多线程TCP服务器

    在工作中 我的任务是实现 TCP 服务器作为 Modbus 从设备的一部分 我在堆栈交换和互联网上读了很多书 包括优秀的http beej us guide bgnet http beej us guide bgnet 但我正在努力解决设计
  • 如何通过 JavaScript 设置浏览器选项卡的锚点目标名称?

    当从外部超链接调用我的网站时 如果它已经打开 它将在同一浏览器选项卡中重新打开 这可以通过在超链接的 HTML 中指定适当的目标属性来实现 a href http my website org target self a 但是 如果在未指定
  • ASP.NET Core 2.2(发布)产生错误并停止 w3wp

    刚刚将我们的 ASP NET Core 2 1 5 项目之一升级到今天发布的 v 2 2 部署到生产服务器后 它会失败并关闭工作进程 项目在 Windows 10 1803 17134 441 上本地运行良好 但在生产服务器上运行不佳 Wi
  • 与 2013 年相比,initializer_list 中的双重删除

    今天 我的项目中遇到了内存问题 其中一个类使用 c 11 初始化器列表 系统发出内存问题信号 dbgdel cpp 中的表达式 BLOCK TYPE IS VALID pHead gt nBlockUse 我将代码简化为一个简单的示例 它不
  • Angular 2 Web Worker - UI 未运行

    我有一个 angular2 应用程序在网络工作者中运行 从表面上看 一切都按我的预期运行 但 DOM 似乎没有发生任何事情 例如 我在应用程序加载时显示预加载器 但它永远不会被实际应用程序 UI 替换
  • 来自守护程序的错误响应:连接到网络失败,请确保您的网络选项正确并检查管理器日志:超出上下文期限

    我正在尝试使用覆盖网络设置 docker swarm 我在 aws 上有一些主机 而其他主机是运行 Ubuntu 的笔记本电脑 与 aws 上相同 每个节点都有一个静态公共IP 我创建了一个覆盖网络 docker network creat
  • 为什么 Javascript 返回不正确的 UTC 月份值?

    好吧 首先 让我说我已经这样做了一千次了 我只是想在 JavaScript 中打印 utc 时间 但是 我得到的值是错误的 JavaScript 将在 8 月返回 8 而不是 9 月 9 因为今天是 2014 年 9 月 2 日 UTC 时
  • initState 中的 Flutter 提供程序

    我目前正在尝试将 Provider 作为状态管理解决方案 并且我知道它不能在 initState 函数内部使用 我见过的所有示例都调用派生类中的方法ChangeNotifier根据用户操作 例如 用户单击按钮 进行类 但是如果我需要在初始化
  • 如何使用查询性能计数器?

    我最近决定需要将 Timer 类的使用毫秒改为微秒 经过一番研究后 我认为 QueryPerformanceCounter 可能是我最安全的选择 警告Boost Posix它可能无法在 Win32 API 上运行 这让我有点失望 但是 我不