algorithm - 执行不同时期的功能
问题描述
我必须在代码中执行一些函数,这些函数有自己的周期值,例如,func1
是 5 秒,funcN
有 19 秒的周期。
为此,我有一个名为的变量taskTime
,它每秒增加一次。periodOfFuncX
我将函数周期存储在一个名为where entryi
表示函数周期的数组中i
(我使用 1 索引)。我取模funcTime
和周期值来决定是否可以执行这些函数。伪代码如下:
N <- 10 // lets say there are 10 functions
func1() {/* ... */}
func2() {/* ... */}
/* ... */
func10() {/* ... */}
periodOfFuncX[N]
fillPeriods { /* assign period of each function to periodOfFuncX */}
periodLoop()
{
funcTime <- 0
fillPeriods()
while true do:
if(funcTime % periodOfFuncX[1] == 0) {func1()}
if(funcTime % periodOfFuncX[2] == 0) {func2()}
if(funcTime % periodOfFuncX[3] == 0) {func3()}
/* ... */
if(funcTime % periodOfFuncX[10] == 0) {func10()}
delay(1) /* assume 1 second delay */
funcTime <- funcTime + 1 /* increment the timer. Note that timer is going to overflow and reset when exceeds INT_MAX */
}
这种方法有缺点。它可以在第一个条目中执行所有函数,但是当funcTimer
溢出和分配时0
,它会通过突然异步执行所有函数来违反函数的周期。此外,顺序执行在循环内和循环之间引入了聚合延迟。另一方面,我只有一个很好的计时器变量。如果我添加&& funcTime != 0
到 if-checks,则不会在上述溢出和获取 0 的情况下调用函数。
您对我描述的问题有其他建议或评论吗?
PS我不太确定要分配哪些标签。如果您帮助标记,会很高兴。
解决方案
对于较小的 N 和周期,请尝试通过周期的最小公倍数对 funcTime 取模。否则,我强烈建议使用以各自周期为模的计时器列表。它可能会以更优雅的编码结束。
推荐阅读
- angular - 如何使用 Renderer2 使 parentNode 和模拟点击更安全?
- azure - 为什么 Azure 服务总线消息处理(AKS 中托管的 .NET Core)每 15 分钟下降一次,并且需要 3 倍以前的群集资源?
- sql - 将两个子查询合并为一列
- solr - Apache solr 在 Linux 中的自定义文件夹中安装 - 404 问题
- r - 如何在 R 中为 dygraph 鼠标悬停添加标签?
- javascript - 如何在 JS 中更新 typeahead 中的数据源?
- python - 如何仅屏蔽输出(标记数据)。我的输入数据没有任何问题
- string - 如何通过类方法打印字符串*?
- python - 输入包含 NaN、无穷大或对于 dtype('float32') 来说太大的值。我已经用 mode 填充了输入 Nans
- android - Flutter firebase - 如何远程将数据添加到android应用程序中的特定页面?