# HG changeset patch # User gongo@localhost.localdomain # Date 1233755056 -32400 # Node ID e9a52d68db425780422c457671a3c6f0af740439 # Parent cd3fda5a24ae38216fe7c2ad71f426740ead51de rename cerium_main to TMmain, add TMend() diff -r cd3fda5a24ae -r e9a52d68db42 TaskManager/ChangeLog --- a/TaskManager/ChangeLog Sun Feb 01 20:46:39 2009 +0900 +++ b/TaskManager/ChangeLog Wed Feb 04 22:44:16 2009 +0900 @@ -1,3 +1,20 @@ +2009-02-04 Wataru MIYAGUNI + + * kernel/ppe/TaskManager.cc (TaskManager::allocate): rename + malloc -> allocate + + * kernel/main.cc (main): fix + cerium_main を呼ぶのではなく、TMmain という名前にしました。 + ちょっと SDLmain をパクった感じで。 + まあ TaskManager の main で cerium_* って名前は微妙に変だからね。 + + * kernel/ppe/TaskManager.cc (TaskManager::set_TMend): add + cerium_main があるんだから、cerium_end があってもいいじゃない。 + もっと言うと、TaskManager に main を隠すって流れなんだけど + 終了を検知できないのはちとやりづらいかなと。 + たとえば測定とか。Task の post_func とかでもやれないことはないけどね。 + というわけで、ユーザが、プログラム終了時に呼ばれる関数を設定できるように。 + 2009-01-20 Wataru MIYAGUNI * Cell/spe/SchedTask.cc (SchedTask::get_cpuid): add diff -r cd3fda5a24ae -r e9a52d68db42 TaskManager/kernel/main.cc --- a/TaskManager/kernel/main.cc Sun Feb 01 20:46:39 2009 +0900 +++ b/TaskManager/kernel/main.cc Wed Feb 04 22:44:16 2009 +0900 @@ -3,8 +3,12 @@ #include #include "TaskManager.h" -/* for user main function */ -extern int cerium_main(int argc, char *argv[]); +/* User main function */ +extern int TMmain(int argc, char *argv[]); + +/* Default TMend function */ +static void +defaultTMend(void) {} TaskManager *manager; static char *help_str = "\n\ @@ -30,12 +34,16 @@ manager = new TaskManager(cpuNum); manager->init(); - if (cerium_main(argc, argv) < 0) { + manager->set_TMend(defaultTMend); + + if (TMmain(argc, argv) < 0) { goto FINISH; } manager->run(); + (manager->tm_end)(); + FINISH: delete manager; diff -r cd3fda5a24ae -r e9a52d68db42 TaskManager/kernel/ppe/TaskManager.cc --- a/TaskManager/kernel/ppe/TaskManager.cc Sun Feb 01 20:46:39 2009 +0900 +++ b/TaskManager/kernel/ppe/TaskManager.cc Wed Feb 04 22:44:16 2009 +0900 @@ -50,8 +50,22 @@ return m_impl->create_task(cmd); } +/** + * TaskManaer 終了時に実行される関数の設定 + */ +void +TaskManager::set_TMend(void (*endf)(void)) +{ + tm_end = endf; +} + void TaskManager::run(void) { m_impl->run(); } + +void* +TaskManager::allocate(int size) { + return m_impl->allocate(size); +} diff -r cd3fda5a24ae -r e9a52d68db42 include/TaskManager/TaskManager.h --- a/include/TaskManager/TaskManager.h Sun Feb 01 20:46:39 2009 +0900 +++ b/include/TaskManager/TaskManager.h Wed Feb 04 22:44:16 2009 +0900 @@ -12,17 +12,19 @@ ~TaskManager(void); /* variables */ - TaskManagerImpl *m_impl; + + TaskManagerImpl *m_impl; + void (*tm_end)(void); + + /* user function */ + HTaskPtr create_task(int cmd); + void run(void); + void *allocate(int size); + void set_TMend(void (*endf)(void)); /* functions */ void init(void); void finish(void); - HTaskPtr create_task(int cmd); - void run(void); - - void* malloc(int size) { - return m_impl->allocate(size); - } private: int machineNum;