gpt4 book ai didi

algorithm - 优先处理必须在定时器上运行的方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:38:06 26 4
gpt4 key购买 nike

这个问题不是关于任何特定的语言,而是解决一个问题。

我有一个计时器,它向机器人发送方法并请求传感器数据。

一些传感器非常重要,应该几乎总是被请求,而其他一些传感器并不那么重要,但应该不时读取。

想象一下我有我的计时器,在计时器中它要求一个方法,该方法将由下面的代码返回:

Timer_Tick()
{
AskForData(SensorRequestList())
}

private int _tCliffState = 0;
private int _tCliffSignal = 0;
private int _tLight = 0;
//and 7 other

private byte[] SensorRequestList()
{
if (_tCliffState <= 5)
{
_tCliffState++;
return RequestCliffStates();
}
if(_tCliffSignal < 1)
{
_tCliffSignal++;
return RequestCliffSignals();
}
if(_tLight < 1)
{
_tLight++;
RequestLightSignals();
}
//and more ifs!


//reset all
_tCliffState = 0;
_tCliffSignal = 0;
_tLight = 0;
//...
}

如果我有 10 个方法,最好的方法是什么,假设命名为 1,2,3,...10,优先级也为 1,2,3...10。

我怎样才能获得一个很好的模式,我可以确定具有更高优先级的方法会请求更多?像这样的模式:

1,1,1,2,1,3,1,1,4,1,1,1,2,1,1,1,3,1,1,1,4 等等

最佳答案

如果数据定期进入,则更容易分析在一段时间内收集的数据 - 例如每毫秒一次、每秒一次、每天一次、每周一次或其他什么。

如果您最终需要保证性能 - 如果机器人没有至少每秒或其他时间从某个传感器接收到信息,它可能会犯错误 - 如果您的程序按某种定期计划运行会更容易。

出于这些原因,我建议您通过重复发出一些固定数量的请求来收集您的数据,并且在每个固定数量的请求之间有一个固定的间隔。我通常会将这种固定数量的请求称为一个帧。

在帧中为非常重要的传感器读数提供它们自己的位置,以便在每一帧中收集它们。让不太重要的传感器读数在它们之间共享一个插槽,例如,您可以让 8 个传感器读数共享一个插槽,每个传感器读数每 8 帧收集一次。如果你想让生活更复杂,你可以共享子槽,所以 8 个非常不重​​要的传感器读数可以共享一个子槽,每 64 帧收集一次。

为数据和原始值保留某种时间戳通常是个好主意。事实上,有些系统会安排每一帧快照并记录这次快照的时间,然后在快照时间之后读取值。那么所有的值都是同一时刻的读数,这个时刻是已知的。

关于algorithm - 优先处理必须在定时器上运行的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14180040/

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