c++ - 周期性时间间隔调用函数的API

标签 c++ c data-structures timer implementation

在最近的一次采访中有一个有趣的问题,在这里。

需要实现一个函数,函数接受一个函数指针和一个时间间隔。 它应该使 func1 能够在每个 time_interval 被调用。

我们提供了一个 API,每个时钟滴答都会调用该 API。 可以多次调用 create_timer,在这种情况下,它应该根据各自的时间间隔调用每个函数指针。

    // api    
    create_timer(&func, interval) 

    // call to api would look like
    create_timer(&func1, 10);
    create_timer(&func2, 5);

我建议创建一个函数指针链表,但在那种情况下,它是对每个时钟滴答的线性搜索。这不是一个好的解决方案。

我也提出了优先级队列解决方案,但效果不佳。 我们需要存储每个函数调用 create_timer 的时间,然后计算与当前时间的差值,然后如果该差值是 time_interval 的倍数,则调用该函数。

有什么有趣的解决方案吗?

最佳答案

“我建议创建一个函数指针链表”

请注意,这种实现必须在每次新的报价时一遍又一遍地遍历所有计划的事件,只是为了找出是否应该调用某些函数。

更好的方法是使用具有明确顺序的排序数据结构,比方说一个优先级队列,其中所有事件将按顺序排序,其中他们应该被处理/执行。即:

create_timer(&func1, 10);
create_timer(&func2, 5);
create_timer(&func3, 15);

可能会导致以下优先级队列:

5   func1
10  func2
15  func3

当计时器到达第 5 个滴答时,它会调用 func1 并将其从队列中删除,然后它会使用更新后的值“last val + ”将其插入回此队列5”:

10  func2
10  func1
15  func3

等等。

关于c++ - 周期性时间间隔调用函数的API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19472386/

相关文章:

c++ - 范围最小值/最大值查询

algorithm - 如何确定一个范围内的数字?

java - 如何反转链表?

c - mmap 无效参数错误

c - 错误的值 - 将大字符分解为 int 数组

C中的计算包含

c++ - opengl 中鼠标输入背后的数学和偏航/俯仰值

c++ - cout << 调用它打印的函数的顺序?

c++ - AMP 的非矩形数据包装器?

c++ - boost property_tree 在循环中添加节点