假设有一个虚构的操作系统......
其中有一个名为settime的函数,它获取指向函数和时间戳的指针。
问题是每次调用函数时它都会在最后一次调用时运行(所以只调用作为参数提供的新函数)。
我想向我的用户公开一个名为settime2的新功能,该功能允许用户调用它,并在不破坏先前调用的情况下计时功能。
在settime2实现中,我可以调用settime。和getcurrenttime。甚至用settime或settime2作为函数指针参数调用settime。
有什么建议吗?
感谢
答案 0 :(得分:2)
假设在特定时间调用被调用的函数...
settime2需要做的是保留函数指针和时间戳值的链表。 按排序顺序将新函数/时间戳值插入列表:最早的第一个。
使用settime设置通用处理程序函数,并将超时设置为所需的最早时间(超时列表的头部)。
调用泛型处理程序时,删除列表的头部并调用其函数。 如果列表的头部具有相同的时间戳,请重复执行此操作。
如果列表不为空,请再次使用列表头部的时间戳调用settime。
如果时间戳确实是一个持续时间(例如10毫秒),那么做几乎相同的事情,但保存的持续时间是所有先前持续时间的总和以及形成最后持续时间的增量。
例如,三个调用(f,15),(g,7),(h,7)和(i,20)将成为列表
head -> (g,7) -> (h,0) -> (f, 8) -> (i,5)
第一个设定时间为7,g和h将被调用。下一个settime将是8之后(总共15)和f被调用,最后是5次之后(在20)我将被调用。
处于活动状态时,请小心处理列表更改。 ; - )