From: Mikko Rasa Date: Mon, 23 May 2011 18:07:55 +0000 (+0300) Subject: Eliminate loop mode from Application X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=fcd7272c28b6da5a68d41e5aac7be1dfd2eeab78;p=libs%2Fcore.git Eliminate loop mode from Application --- diff --git a/source/core/application.cpp b/source/core/application.cpp index f64f350..17611c1 100644 --- a/source/core/application.cpp +++ b/source/core/application.cpp @@ -1,7 +1,7 @@ /* $Id$ This file is part of libmspcore -Copyright © 2006 Mikko Rasa, Mikkosoft Productions +Copyright © 2006-2008, 2011 Mikko Rasa, Mikkosoft Productions Distributed under the LGPL */ @@ -20,8 +20,7 @@ using namespace std; namespace Msp { Application::Application(): - exit_code(0), - loop_mode_(TICK_SLEEP) + exit_code(0) { } /** @@ -107,40 +106,14 @@ void Application::usage(const char *reason, const char *, bool) } /** -Default main loop. Behavior depends on loop_mode_. A custom main loop should -monitor the done member variable and return exit_code. +Default main loop. Calls tick() repeatedly until exit() is called. A custom +main loop should monitor the done member variable and return exit_code. */ int Application::main() { - if(loop_mode_==NONE) - return 0; - - done=false; + done = false; while(!done) - { - if(loop_mode_==SLEEP) - { - sleep_sem_.wait(); - if(!done) - tick(); - } - else if(loop_mode_==TICK_SLEEP) - { - tick(); - Time::sleep(Time::msec); - } - else if(loop_mode_==TICK_YIELD) - { - tick(); -#ifdef WIN32 - Sleep(0); -#else - sched_yield(); -#endif - } - else if(loop_mode_==TICK_BUSY) - tick(); - } + tick(); return exit_code; } @@ -153,36 +126,13 @@ void Application::catch_signal(int s) signal(s, &sighandler_); } -/** -Changes the main loop mode. -*/ -void Application::set_loop_mode(LoopMode l) -{ - LoopMode old_mode=loop_mode_; - loop_mode_=l; - if(old_mode==SLEEP) - sleep_sem_.signal(); -} - -/** -Causes the tick() function to be executed once if loop mode is SLEEP. Has no -effect with other loop modes. -*/ -void Application::induce_tick() -{ - if(loop_mode_==SLEEP) - sleep_sem_.signal(); -} - /** Causes the application to exit gracefully with the given exit code. */ void Application::exit(int c) { - done=true; - exit_code=c; - if(loop_mode_==SLEEP) - sleep_sem_.signal(); + done = true; + exit_code = c; } /** diff --git a/source/core/application.h b/source/core/application.h index ca51bbc..38df732 100644 --- a/source/core/application.h +++ b/source/core/application.h @@ -1,14 +1,13 @@ /* $Id$ This file is part of libmspcore -Copyright © 2006 Mikko Rasa, Mikkosoft Productions +Copyright © 2006-2008, 2011 Mikko Rasa, Mikkosoft Productions Distributed under the LGPL */ + #ifndef MSP_CORE_APPLICATION_H_ #define MSP_CORE_APPLICATION_H_ -#include "semaphore.h" - namespace Msp { /** @@ -18,15 +17,6 @@ member of type RegApp. class Application { protected: - enum LoopMode - { - NONE, /// No main loop - main() will just return - SLEEP, /// Only sleep in the main loop - useful for threaded servers - TICK_SLEEP, /// Call tick every iteration, with a short sleep in between - TICK_YIELD, /// Call tick every iteration, with sched_yield in between - TICK_BUSY /// Call tick every iteration - }; - class RegBase { public: @@ -49,9 +39,6 @@ protected: int exit_code; private: - LoopMode loop_mode_; - Semaphore sleep_sem_; - static RegBase *reg_app_; static Application *app_; static void *data_; @@ -68,8 +55,6 @@ public: protected: virtual int main(); void catch_signal(int); - void set_loop_mode(LoopMode); - void induce_tick(); void exit(int); virtual void tick() { } virtual void sighandler(int) { }