首页 > 系统相关 >C++实现windows高精度微秒级延时(亲测可用)

C++实现windows高精度微秒级延时(亲测可用)

时间:2024-04-03 16:02:26浏览次数:21  
标签:windows counter C++ LARGE 计数器 QuadPart INTEGER 微秒 亲测

C++实现windows高精度微秒级延时(亲测可用)
代码如下:

#include <iostream>
#include <windows.h>

// 定义一个结构体来保存性能计数器的频率和时间戳
struct PerformanceCounter {
    LARGE_INTEGER frequency; // 计数器频率
    LARGE_INTEGER start;      // 开始时间戳
    LARGE_INTEGER end;        // 结束时间戳
};

// 初始化性能计数器
void InitPerformanceCounter(PerformanceCounter& counter) {
    // 获取计数器频率
    QueryPerformanceFrequency(&counter.frequency);
}

// 计算两个时间戳之间的微秒差
double CalculateMicrosecondDifference(const LARGE_INTEGER& start, const LARGE_INTEGER& end, const LARGE_INTEGER& frequency) {
    // 计算差值并转换为微秒
    return static_cast<double>(end.QuadPart - start.QuadPart) / frequency.QuadPart * 1000000.0;
}

// 实现微秒级延时
void MicrosecondDelay(unsigned int microseconds) {
    PerformanceCounter counter;
    InitPerformanceCounter(counter);

    // 获取延时前的计数器值
    QueryPerformanceCounter(&counter.start);

    // 计算延时后的计数器目标值
    unsigned __int64 targetCounter = counter.start.QuadPart + (static_cast<unsigned __int64>(microseconds) * counter.frequency.QuadPart) / 1000000;

    // 循环直到当前计数器值达到或超过目标值
    do {
        QueryPerformanceCounter(&counter.end);
    } while (counter.end.QuadPart < targetCounter);
}

int main() {
    // 测试微秒级延时函数5us/次 循环200万次 共10s
    std::cout << "开始执行 5 微秒的延时..." << std::endl;
    for (int i = 0; i < 2000000; i++)
    {
        MicrosecondDelay(5);
    }
    
    std::cout << "延时结束。" << std::endl;
	system("pause");
    return 0;
}

标签:windows,counter,C++,LARGE,计数器,QuadPart,INTEGER,微秒,亲测
From: https://blog.csdn.net/weixin_45834799/article/details/137343169

相关文章

  • 给c++小白的教程2:输出(1)
    想要输入代码,就必须打开新的源代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ return0;}请萌新牢牢记住这段代码!!!要形成肌肉记忆!!!#include<bits/stdc++.h>是头文件,bits/stdc++.h是万能头,包括了c++里的绝大多数函数与数据结构usingnamespacestd;是命......
  • 【C++】string模拟实现
     ......
  • windows 系统的 cmd 命令窗口不是很好用,可以试试 Cmder 工具包
    windows系统的cmd命令窗口不是很好用,可以试试Cmder工具包一、常规操作1、在运行框中快速启动Cmder将cmder.exe文件所在目录加载环境变量PATH中。2、把cmser加载鼠标右键中方法一:以管理员身份运行Cmder  ->输入  cmder/registerall  。方......
  • vcruntime140.dll没有被指定在windows上运行
    在计算机使用过程中,我们常常会遇到一些错误提示或程序崩溃的情况。其中,vcruntime140.dll是一个重要的动态链接库文件,它对于Windows系统的正常运行起着至关重要的作用。本文将详细介绍vcruntime140.dll文件的属性以及其丢失对Windows系统的影响,和最重要的vcruntime140.dll丢失的......
  • C++11中的正则表达式
    目录regexregex_match函数详解函数原型使用方法基本使用使用std::smatch获取更多信息注意事项regex_search函数详解函数原型使用方法基本使用使用std::smatch获取匹配信息注意事项regex_search和regex_match的区别regexC++11引入了<regex>头文件,它提供了对正则表达式的......
  • 该升级了!Windows 11 24H2要来了:支持USB4、Wi-Fi 7等
    如果你一直在期待可以升级的Windows11,那么好消息来了。据国外媒体报道称,微软正式确认了Windows1124H2,将其定名为Windows11的"2024更新",预计将在今年9月和10月期间全面推出。报道称,Windows1124H2将于本月进入RTM阶段,而首批基于Arm架构的AIPC将在接下来几个月的6月亮相。......
  • 【C/C++】VsCode调试配置tasks.json和launch.json
    前段时间配大作业环境改了很多配置,发现tasks.json和launch.json经常令自己很迷惑。网上找的配置有时会有各种各样的问题,在此记录一下上学期配好的配置文件,日后有时间再详细研究研究tasks.json:{"version":"2.0.0","tasks":[{"type":"shell",......
  • [c++] 小游戏 斗破苍穹2.7.1 版本 zty出品
    前言大家好,今天带来的是经典版本2.7.1这个版本在斗破苍穹中十分重要您好,欢迎您玩苍穹世界。为了给您更好的游戏体验,zty时不时会优化本游戏,优化后会尽快发布在网上。关于外挂方面,开启外挂的方式是设定勇者姓名时,输入“zty”(不包括双引号)。由于2.6.1版本的bug,我们在2.6.1的......
  • Windows如何优雅的运行ROS2/linux
    Windows如何优雅的运行ROS2/linux前言在ROS/ROS2开发过程中,大家普遍使用到的分布式开发方法都是基于虚拟机/双系统进行,本质上是希望基于Ubuntu良好的生态环境进行,但是两种方式各有各自的好处,也有各自的弊端,例如虚拟机很大而且并不能运行GPU;又比如双系统会导致个人数据碎片化(......
  • 【华为OD】2024年华为OD机试C卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript
    【华为OD】2024年C卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客 2024年华为OD机试C卷真题题集题库,有2种分数的题目列表分别是100分的列表、200分的列表需要订阅请看链接:C卷......