首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在WinXP下获得准确的1ms计时器滴答

在Windows XP系统下,获取准确的1ms计时器滴答需要使用高精度计时器。以下是一些建议:

  1. 使用QueryPerformanceCounter函数:QueryPerformanceCounter是一个高精度计时器,可以提供较高的时间分辨率。使用方法如下:
代码语言:c
复制
#include<windows.h>
#include<stdio.h>

int main()
{
    LARGE_INTEGER frequency;
    LARGE_INTEGER start;
    LARGE_INTEGER end;

    QueryPerformanceFrequency(&frequency);
    QueryPerformanceCounter(&start);

    // 您的代码

    QueryPerformanceCounter(&end);
    double elapsedTime = (double)(end.QuadPart - start.QuadPart) / frequency.QuadPart * 1000;

    printf("Elapsed time: %f ms\n", elapsedTime);
    return 0;
}
  1. 使用Multimedia Timer:Windows Multimedia Timer是一个高精度计时器,可以提供较高的时间分辨率。使用方法如下:
代码语言:c
复制
#include<windows.h>
#include <mmsystem.h>
#include<stdio.h>

int main()
{
    UINT wTimerRes = 1;
    MMRESULT result = timeBeginPeriod(wTimerRes);

    DWORD start = timeGetTime();

    // 您的代码

    DWORD end = timeGetTime();
    timeEndPeriod(wTimerRes);

    double elapsedTime = (double)(end - start);

    printf("Elapsed time: %f ms\n", elapsedTime);
    return 0;
}

请注意,Windows XP系统已经过时,可能无法支持某些新的功能和库。因此,建议您升级到更新的操作系统,以获得更好的兼容性和安全性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SysTick 定时器

这个72000就可以作为系统滴答定时器的初始值,将这个值写入系统滴答定时器,定时器在每个时钟周期减1,减到0时,就刚好是1ms,同时产生中断通知,再次加载72000如此反复。...系统滴答定时器控制寄存器比较少,整体比较简单,借助本次机会详细分析一下寄存器和HAL之间是调用关系。...NVIC,而“HAL_SYSTICK_Config()”函数使能的是SysTick; 为了方便修改SysTick的初始值,这里定义几个常见的延时周期,如代码段 11.3.4 所示。...创建延时函数“SysTickDelay()”,在该函数里设置自定义全局变量systick_t的初始值,SysTick每计数完一次则进入SysTick中断,将全局变量systick_t的值减1,如代码段...通过LED展示SysTick的延时结果不够严谨,有条件的读者可以使用示波器或逻辑分析仪测试LED灯对应引脚(PB0,在J21_3引出)的翻转时间,如图 11.4.1 所示,分别修改延时时间10us、1ms

1.6K20

HAL库与Cubemx系列|Systick-系统滴答定时器详解

在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。...例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。...SysTick 的最大使命,就是定期地产生异常请求,作为系统的时基。OS 都需要这种“滴答” 来推动任务和时间的管理。如欲使能 SysTick 异常, 则把 STCSR.TICKINT 置位。...好家伙,转了十万八千里,最终还是在Systick中断中进行增加的,默认配置的是Systick 1ms中断,这下知道了我们调用的HAL_Delay(),为什么是1ms了吧,绕了那么一大圈,是不是有点想打人呢...默认配置的是1ms中断周期,那我们HAL_Delay()的最小单位是1ms,如果想获得1us的中断周期,该如何调整呢?且往下看,这是我们自定义的systick周期配置函数,一步一步来看 ?

2.6K52
  • 深入研究 Node.js 的回调队列

    那么,事件循环是按照什么样的顺序从队列中选择回调函数的呢? 首先,让我们看一下回调队列的五种主要类型。...回调队列的类型 IO 队列(IO queue) IO操作是指涉及外部设备(如计算机的硬盘、网卡等)的操作。常见的操作包括读写文件操作、网络操作等。...计时器队列(Timer queue) 每个涉及 Node.js 计时器功能[1]的操作(如 setTimeout() 和 setInterval())都是要被添加到计时器队列的。...在 Node.js 将回调函数添加到计时器队列之前,setTimeout 在后台花费 1ms。 现在,while 操作(同步)需要 3ms。...事件循环会确定将要在每次迭代中接下来要执行的回调函数。 了解队列如何在 Node.js 中工作,使你对其有了更好的了解,因为队列是环境的核心功能之一。

    3.8K10

    传说中的死亡ping

    一般玩电脑的对这个PING命令很熟悉。首先说一下什么是ping。ping是windows自带的一种命令工具。一般是用来检测网络是否通畅,是否存在网络连接问题等。 那怎样运用呢?...以WinXP为例,在一种叫做命令提示符的窗口中运行。(在Win9x中叫DOS窗口)单击“开始”,点击“运行”,输入“CMD”,打开命令提示符。先说几个简单的。...Sent=4 Received=4 Lost=0 0% loss Approximate round trip times in milli-seconds Minimum=0ms Maxiumu=1ms...Packets Sent=4 Received=4 Lost=0 Approximate round trip times in milli-seconds Minimum=1ms Maximum=9ms...获取IP的方法有很多,比如使用彩虹QQ,IPsniper等,还有一个命令[netstat -n],具体怎么用就免了。至于获得对方IP地址还有什么用处,你自己想吧,这里就不引导你做坏事了。

    87110

    .NET 中如何实现高精度定时器

    硬件计时器由三个部分组成:时钟周期生成器、计数时钟周期的计数器和检索计数器值的方法。 这三个分量的特征决定了QueryPerformanceCounter (QPC)的分辨率、精度、准确性和稳定性。...默认情况下,Windows的系统的计时器精度为15ms左右。如果是线程阻塞,出让其时间片进行等待,然后再被调度运行的时间至少是一个时间切片15ms左右。...Windows系统API提供了timeBeginPeriod可以把计时器精度修改到1ms,在使用计时器服务之前立即调用timeBeginPeriod,并在使用完计时器服务后立即调用timeEndPeriod...从Windows 10, version 2004开始,只有调用timeEndPeriod的进程受到影响。 设置更高的精度可以提高等待函数中超时间隔的准确性。...设置更高的分辨率不会提高高分辨率性能计数器的准确性。 通常我们使用Thread.Sleep来挂起线程等待,Sleep的参数最小为1ms,但实际上很不稳定,实测发现大部分时候稳定在阻塞2ms。

    37210

    .NET中如何实现高精度定时器

    硬件计时器由三个部分组成:时钟周期生成器、计数时钟周期的计数器和检索计数器值的方法。...默认情况下,Windows的系统的计时器精度为15ms左右。如果是线程阻塞,出让其时间片进行等待,然后再被调度运行的时间至少是一个时间切片15ms左右。...Windows系统API提供了timeEndPeriod可以把计时器精度修改到1ms,在使用计时器服务之前立即调用timeEndPeriod,并在使用完计时器服务后立即调用timeEndPeriod。...从Windows 10, version 2004开始,只有调用timeEndPeriod的进程受到影响。 设置更高的精度可以提高等待函数中超时间隔的准确性。...设置更高的分辨率不会提高高分辨率性能计数器的准确性。[2] 通常我们使用Thread.Sleep来挂起线程等待,Sleep的参数最小为1ms,但实际上很不稳定,实测发现大部分时候稳定在阻塞2ms。

    32210

    STC单片机操作系统——RTX51 Tiny

    与中断功能相似的状态下 信号和信息可以通过邮箱系统在任务之间互相传递 你可以从一存 储池中分配和释放内存 你可以强迫一个任务等待中断 超时或者是从另一个任务或中断发出的 信号或信息 RTX51 Tiny...INT_CLOCK 是 RTX系统的1个滴答时钟的时间,此处定义为33177是指 1个系统滴答时钟=33177个单片机的机器周期,由于我的单片机时钟的33.1776Mhz,所以其一个机器周期为1/33.1776...≈ 0.0301us,33177个机器周器就是 999.9us≈1ms。...); /*无用参数*/ 该函数挂起当前任务,并等待一个或几个事件,如时间间隔,超时,或从其它任务和中断发来的信号。...如果所设定的时钟滴答数已经耗尽(时间是从 内核函数 os_wait 的上一次调用开始算起),任务将立即运行(在没有其他任务运行的 条件下)。

    5900

    使用系统定时器SysTick实现精确延时微秒和毫秒函数

    SysTick定时器简介 SysTick定时器是存在于系统内核的一个滴答定时器,只要是ARM Cortex-M0/M3/M4/M7内核的MCU都包含这个定时器,它是一个24位的递减定时器,当计数到 0...如果SysTick初始化为: SysTick_Config(SystemCoreClock / 1000); //定时1ms 即SysTick定时器每1ms中断一次,如果我们定义全局变量,然后在中断函数中...fac_us=0; //us延时倍乘数 uint32_t fac_ms=0; //ms延时倍乘数,在ucos下,...void delay_ms(uint32_t nms) { SysTick_Config(SystemCoreClock / 1000); //定时1ms...有了精确延时函数,那么使用通用GPIO软件模拟一些通信协议,如IIC、SPI等串行协议,就可以驱动很多硬件设备了,如EEPROM、温湿度传感器、显示屏等等。

    2.5K20

    滴答清单待办状态同步更新Notion

    目前有些博主的案例主要是以滴答清单国际版TickTick为例展示的,今天我们就来讲解一下,如何通过腾讯云HiFlow实现,滴答清单任务更新后反向同步Notion。...如果读过我们上一篇教程的用户就记得,我们最后一步就是把自动生成的滴答清单id反写回Notion,聪明的用户肯定猜到了,我们通过这个滴答清单的ID可以作为一个union id来把两边的待办对应起来。...所以首先打开腾讯云HiFlow的模版【滴答清单更新数据后同步更新Notion任务状态】:我们需要做的第一步是,在【滴答清单】里把我们通过上个【Notion待办自动生成滴答清单todo】生成的待办”碎碎念...第二步,我们需要查询Notion的数据,我们选择我们需要查询的对应的Notion page比如这里我们需要我们之前写入的待办的滴答ID等于我们完成的滴答ID的值,通过这个值的对比和映射,我们就可以准确的找到...欢迎和我们分享投稿,会有机会获得限量腾讯周边公仔。

    1.4K40

    【STM32F407的DSP教程】第48章 STM32F407的中值滤波器实现,适合噪声和脉冲过滤(支持逐个数据的实时滤波)「建议收藏」

    K1键按下,整块数据滤波测试。 K2键按下,逐个数据滤波器测试。 使用AC6注意事项 特别注意附件章节C的问题 上电后串口打印的信息: 波特率 115200,数据位 8,奇偶校验位无,停止位 1。...F407自带的16MHz,HSI时钟: - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。...K1键按下,整块数据滤波测试。 K2键按下,逐个数据滤波器测试。 使用AC6注意事项 特别注意附件章节C的问题 上电后串口打印的信息: 波特率 115200,数据位 8,奇偶校验位无,停止位 1。...F407自带的16MHz,HSI时钟: - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    55420

    LARGE_INTEGER类型和LONGLONG类型以及QueryPerformanceFrequency函数

    一般用于处理超大的数据。比如CPU里的“性能计数器”之频率,经常在3亿次以上!就是1秒钟能跑3亿个“滴答”,这种情况下,往往需要超大的整数用来存储数据,此时就要用到LONGLONG。...;    };    LONGLONG QuadPart;   } LARGE_INTEGER; 在定时前应该先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率...接着在需要严格计时的事件发生前和发生之后分别调用QueryPerformanceCounter(),利用两次获得的计数之差和时钟频率,就可以计算出事件经历的精确时间。...(&litmp);//获得时钟频率   dff=(double)litmp.QuadPart;   QueryPerformanceCounter(&litmp);//获得初始值   qt1=litmp.QuadPart...);   dft=dfm/dff;//获得对应的时间值 需要注意的是DFT计算的结果单位是秒。

    75130

    【STM32F429的DSP教程】第29章 STM32F429移植汇编定点FFT库(64点,256点和1024点)

    按下按键K1,串口打印1024点FFT的幅频响应和相频响应。 按下按键K2,串口打印256点FFT的幅频响应。 按下按键K3,串口打印64点FFT的幅频响应。...F429自带的16MHz,HSI时钟: - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。...按下按键K1,串口打印1024点FFT的幅频响应和相频响应。 按下按键K2,串口打印256点FFT的幅频响应。 按下按键K3,串口打印64点FFT的幅频响应。...按下按键K1,串口打印1024点FFT的幅频响应和相频响应。 按下按键K2,串口打印256点FFT的幅频响应。 按下按键K3,串口打印64点FFT的幅频响应。...F429自带的16MHz,HSI时钟: - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。

    63810

    【STM32F407的DSP教程】第29章 STM32F407移植汇编定点FFT库(64点,256点和1024点)

    按下按键K1,串口打印1024点FFT的幅频响应和相频响应。 按下按键K2,串口打印256点FFT的幅频响应。 按下按键K3,串口打印64点FFT的幅频响应。...F407自带的16MHz,HSI时钟: - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。...按下按键K1,串口打印1024点FFT的幅频响应和相频响应。 按下按键K2,串口打印256点FFT的幅频响应。 按下按键K3,串口打印64点FFT的幅频响应。...按下按键K1,串口打印1024点FFT的幅频响应和相频响应。 按下按键K2,串口打印256点FFT的幅频响应。 按下按键K3,串口打印64点FFT的幅频响应。...F407自带的16MHz,HSI时钟: - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。

    78930

    【STM32F407的DSP教程】第13章 DSP快速计算函数-三角函数和平方根

    在使用这个函数的时候有一点要特别的注意,比如我们要求1000的平方根,而获得结果是1465429,这是为什么呢,分析如下: 定点数1000 = 浮点数 1000 /(2^31) = 4.6566e-07...F407自带的16MHz,HSI时钟: - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。...,因为按钮检测是通过滴答定时器扫描 */ bsp_InitTimer(); /* 初始化滴答定时器 */ bsp_InitUart(); /* 初始化串口 */...按下按键K2, DSP求Sine。 按下按键K3, DSP求平方根。 上电后串口打印的信息: 波特率 115200,数据位 8,奇偶校验位无,停止位 1。 详见本章的3.4  4.4,5.4小节。...F407自带的16MHz,HSI时钟: - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。

    99110
    领券