2011-04-02 16 views
0

這裏是我想要做的基本思想是:定時器抽象桂API

每個窗口小部件,當GUI的一部分訪問事件管理器。事件管理器是多態的,所以它包含來自底層圖形/定時器API的功能。我想要做的是,允許Widgets註冊計時器,他們將在那裏調用一個函數,這個函數會在內部調用事件管理器來註冊計時器。這是一個問題,當一個小部件首次創建時,它不是Gui的一部分。因此,沒有人可以在小部件構造函數中註冊計時器。

我想到了我可以對請求進行排隊以及當小部件成爲gui的一部分,並且可以訪問事件管理器時,它可以將請求出列的事實,但問題在於它並不是真的讓我做這樣的事情:

Timer *timer = registerTimer(0.17); 

if(timer == NULL) 
{ 
    //uh ohs 
} 
else 
{ 
    timer->start(); 
} 

有沒有更好的辦法解決我的問題?

感謝

+0

爲了將來的參考,「圖形用戶界面」通常是寫在全部大寫或無大寫。只是一件小事讓我煩惱。 ;) – Maxpm 2011-04-03 04:26:11

回答

0

事件管理,並提供定時設施2個非常不同的功能,所以我想嘗試事件管理器分離成兩個獨立的課程。然後,您可以將TimerManager設爲單身人士,並從任何您喜歡的地方註冊計時器。

或者,如果您現在不能分離事件管理器類,則可以嘗試使其成爲單例並以此方式訪問計時設施。

+0

我的確在想這件事,唯一的是我不喜歡OOP中的單身人士:(我想, – jmasterx 2011-04-02 23:49:04

+0

嗯,雖然有時候使用它們看起來很自然,例如在widget中註冊計時器應該是完全合法的)以及如何在不通過'TimerManager'作爲參數的情況下實現該功能? – pajton 2011-04-02 23:54:45

+0

Eh ............... – jmasterx 2011-04-05 22:04:25