2009-12-22 109 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