2009-12-22 79 views
1

假设有一个假想的操作系统...功能指针调用

有一个函数叫settime,它获取函数指针和时间戳。

美中不足的是,每一个函数调用时都会运行在最后一次通话(因此只被提供作为参数的新功能将被调用)。

我要揭露一个新的功能,我的用户名为settime2,这将允许用户调用它,和时间的函数,并保留原有的电话。

在settime2实现中,我可以调用settime。和getcurrenttime。甚至可以使用settime或settime2作为函数指针参数来调用settime。

有什么建议吗?

感谢

+1

一个指向什么函数的指针? – 2009-12-22 17:40:50

+1

“settime”用于设置时间或时间函数指针运行多长时间的目的? – 2009-12-22 17:44:36

+1

您可能想澄清一下问题。 – 2009-12-22 17:57:25

回答

2

假设被调用的函数被调用在特定时间下工作......

需要做什么settime2是保持函数指针和时间戳值的链接列表。 按排序顺序将新的函数/时间戳值插入列表中:最早的第一个。

用了setTime建立一个通用的处理功能,并设置超时所需的最早时间(超时表头)。

当调用通用处理程序时,删除列表的头部并调用它的函数。 如果列表头部具有相同的时间戳,请重复执行此操作。

如果该列表不为空,在列表的头部时间戳再次调用时刻设定。

如果时间戳实际上是一个持续时间(例如10毫秒),则做几乎相同的事情,但保存的持续时间是所有先前持续时间的总和以及形成最后持续时间的差值。

例如,三个呼叫,具有(F,15),(G,7),(H,7),和(i,20)将使列表

head -> (g,7) -> (h,0) -> (f, 8) -> (i,5) 

第一时刻设定将在7时,g和h会被调用。下一次设置时间将是8之后(总共15次)和f被调用,并且最后在5次之后(在20)我会被调用。

当处于活动状态时要小心处理列表更改。 ;-)

+0

如果函数的数量非常大,则列表将是一个相当低效的数据结构。它的优点是大多数图书馆都有直接的支持。如果它对你很重要,你可能需要考虑使用堆来存储函数指针及其相关时间。 – Omnifarious 2009-12-23 00:58:35