gpt4 book ai didi

c++ - 高精度事件定时器

转载 作者:可可西里 更新时间:2023-11-01 10:25:27 25 4
gpt4 key购买 nike

#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 function .示例:Using Timer Queues (C++)。

但是,粒度大约为 1ms,设置为 10 ms 可能会在 9/11 ms 处导致周期性打嗝。

为了获得更高的分辨率,您可能必须使用 Clock::now() 设置定时器轮,如 here 所述.

关于c++ - 高精度事件定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19638163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com