高精度事件计时器
High precision event timer
#include "target.h"
#include "xcp.h"
#include "LocatedVars.h"
#include "osek.h"
/**
* This task is activated every 10ms.
*/
long OSTICKDURATION;
TASK( Task10ms )
{
void XCP_FN_TYPE Xcp_CmdProcessor( void );
uint32 startTime = GetQueryPerformanceCounter();
/* Trigger DAQ for the 10ms XCP raster. */
if( XCPEVENT_DAQ_OVERLOAD & Xcp_DoDaqForEvent_10msRstr() )
{
++numDaqOverload10ms;
}
/* Update those variables which are modified every 10ms. */
counter16 += slope16;
/* Trigger STIM for the 10ms XCP raster. */
if( enableBypass10ms )
{
if( XCPEVENT_MISSING_DTO & Xcp_DoStimForEvent_10msRstr() )
{
++numMissingDto10ms;
}
}
duration10ms = (uint32)( ( GetQueryPerformanceCounter() - startTime ) / STOPWATCH_TICKS_PER_US );
}
与某个精确的时钟同步以在特定时间间隔调用函数的最简单(和/或最佳)方法是什么,在正常情况下抖动很小,从C++?我现在正在研究WINDOWS操作系统。上面的代码是针对 RTAS OSEK 的,但我想在 Windows 操作系统的特定时间间隔调用一个函数。任何人都可以用 c++ 语言帮助我吗?
新应用程序应使用 CreateTimerQueueTimer!
此队列中的计时器(称为计时器队列计时器)是轻量级对象,可用于指定在指定的到期时间到达时要调用的回调函数。等待操作由线程池中的线程执行。
CreateTimerQueueTimer 函数。示例:使用计时器队列 (C++)。
但是,粒度约为 1 毫秒,10 毫秒的设置可能会导致 9/11 毫秒的周期性打嗝。
要获得更高的分辨率,您可能需要使用Clock::now()
设置计时器轮,如此处所述。
timeSetEvent API 将为您提供可用的最佳稳定性,并且可以低至 1 毫秒的间隔。
相关文章:
- Linux的Cpp上的计时器
- 提升 ASIO 无法识别计时器对象
- 提升 asio 并发计时器取消问题与链
- 使用单体计时器的pthread_cond_timedwait有时会比预期晚超时
- 窗口中的微秒计时器
- 计时器是否从另一个线程启动?
- 如何在 c++ 中创建计时器
- C++回调计时器实现
- 在计时器或主线程外部的命令上销毁/替换线程
- 如何制作每秒从 30 乘 1 倒计时的计时器?
- OpenCL 基于事件的计时器(c++ 包装器)
- 开关(事件类型)不工作和计时器不显示
- 改进了 C++ 中计时器(超时事件)的实现
- MFC-在dll卸载时,扫描我的代码,任何剩余的计时器,事件,线程等
- 使用C++在windowsmetro中使用计时器触发事件
- 如何使用多个计时器来规划程序中的事件
- 高精度事件计时器
- 我的libevent计时器在另一个事件发生时立即停止.这正常吗?
- 如何使用C++ 11 创建计时器事件
- 使用 boost::asio 实现事件计时器