X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=source%2Ftimex%2FEngine.cpp;h=396e438baecaf33b1d7ef8869808deefca88f77a;hb=5a6cba5fde2b2f538a7515f8293cc0a8d9589dfa;hp=8f2e7a7e31101de884dc2a53e8d8290fba44aabc;hpb=4e12ac57e93c052f716a6305ad8fc099c45899d1;p=anna.git diff --git a/source/timex/Engine.cpp b/source/timex/Engine.cpp index 8f2e7a7..396e438 100644 --- a/source/timex/Engine.cpp +++ b/source/timex/Engine.cpp @@ -1,37 +1,9 @@ -// ANNA - Anna is Not 'N' Anymore -// -// (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo -// -// https://bitbucket.org/testillano/anna -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Authors: eduardo.ramos.testillano@gmail.com -// cisco.tierra@gmail.com +// ANNA - Anna is Not Nothingness Anymore // +// // +// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo // +// // +// See project site at http://redmine.teslayout.com/projects/anna-suite // +// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE // #include @@ -59,13 +31,13 @@ using namespace anna; using namespace anna::comm; /** - Resolucion minima (en milisegundos) soportada por el controlador de tiempos. + Minimum resolution (in milliseconds) supported by the time manager */ //static -const Millisecond timex::Engine::minResolution(100); +const Millisecond anna::timex::Engine::minResolution(10); -timex::Engine::Engine(const Millisecond & maxTimeout, const Millisecond & resolution) : +anna::timex::Engine::Engine(const Millisecond & maxTimeout, const Millisecond & resolution) : app::Component(getClassName()), a_currentQuantum(0), a_maxQuantum(0), @@ -79,7 +51,7 @@ timex::Engine::Engine(const Millisecond & maxTimeout, const Millisecond & resolu timex::sccs::activate(); } -timex::Engine::~Engine() { +anna::timex::Engine::~Engine() { delete a_tickConsumer; delete [] a_timeTable; } @@ -92,8 +64,8 @@ timex::Engine::~Engine() { // posteriores ualarm vamos a calcular la diferencia entre el tiempo esperado y el momento // en que realmente llega la seal de ualarm. //-------------------------------------------------------------------------------------------- -void timex::Engine::do_initialize() -throw(RuntimeException) { +void anna::timex::Engine::do_initialize() +noexcept(false) { LOGMETHOD(TraceMethod tm("timex::Engine", "do_initialize", ANNA_FILE_LOCATION)); if(a_maxQuantum > 0) { @@ -104,6 +76,10 @@ throw(RuntimeException) { if(a_resolution < minResolution) throw RuntimeException(functions::asString("Resolution must be greater than %d milliseconds", minResolution.getValue()), ANNA_FILE_LOCATION); + if(a_resolution < (Millisecond)100) { + LOGWARNING(Logger::warning(functions::asString("Resolutions under 100 milliseconds (%d in this case) slightly increase the CPU usage", a_resolution.getValue()), ANNA_FILE_LOCATION)); + } + if(a_maxTimeout <= a_resolution) throw RuntimeException(functions::asString("Max-Timeout must be greater than %d milliseconds", a_resolution.getValue()), ANNA_FILE_LOCATION); @@ -139,24 +115,24 @@ throw(RuntimeException) { } // Reimplementado de app::Component -void timex::Engine::do_cloneParent() -throw() { +void anna::timex::Engine::do_cloneParent() +{ } /* * Se invoca desde app::Application::clone -> app::Component::do_cloneChild (ojo EN EL NUEVO PROCESO). * Instala la senhal de tick en el proceso, ya que la alarma no se hereda directamente. */ -void timex::Engine::do_cloneChild() -throw(RuntimeException) { +void anna::timex::Engine::do_cloneChild() +noexcept(false) { } //---------------------------------------------------------------------------- // No para los hilos de generacion, sino que evita que se escriban los bytes // en el 'pipe'. //---------------------------------------------------------------------------- -void timex::Engine::pause() -throw(RuntimeException) { +void anna::timex::Engine::pause() +noexcept(false) { Guard guard(this, "timex::Engine (pause)"); if(a_tickProducer->isInPause() == false) { @@ -169,8 +145,8 @@ throw(RuntimeException) { } } -void timex::Engine::play() -throw(RuntimeException) { +void anna::timex::Engine::play() +noexcept(false) { Guard guard(this, "timex::Engine (play)"); if(a_tickProducer->isInPause() == true) { @@ -183,8 +159,8 @@ throw(RuntimeException) { } } -void timex::Engine::activate(timex::TimeEvent* timeEvent) -throw(RuntimeException) { +void anna::timex::Engine::activate(timex::TimeEvent* timeEvent) +noexcept(false) { LOGMETHOD(TraceMethod tm(Logger::Local7, "timex::Engine", "activate", ANNA_FILE_LOCATION)); if(a_maxQuantum == 0) @@ -252,8 +228,8 @@ throw(RuntimeException) { ); } -timex::TimeEvent* timex::Engine::getTimeEvent(const timex::TimeEvent::Id eventTimeId) -throw() { +anna::timex::TimeEvent* anna::timex::Engine::getTimeEvent(const timex::TimeEvent::Id eventTimeId) +{ LOGMETHOD(TraceMethod tm(Logger::Local7, "timex::Engine", "getTimeEvent", ANNA_FILE_LOCATION)); Directory::iterator iid; TimeEvent* result(NULL); @@ -276,8 +252,8 @@ throw() { return result; } -void timex::Engine::cancel(timex::TimeEvent* timeEvent) -throw(RuntimeException) { +void anna::timex::Engine::cancel(timex::TimeEvent* timeEvent) +noexcept(false) { LOGMETHOD(TraceMethod tm(Logger::Local7, "timex::Engine", "cancel", ANNA_FILE_LOCATION)); if(timeEvent == NULL) @@ -324,8 +300,8 @@ throw(RuntimeException) { notifyRelease(timeEvent); } -void timex::Engine::do_stop() -throw() { +void anna::timex::Engine::do_stop() +{ LOGMETHOD(TraceMethod tm("timex::Engine", "do_stop", ANNA_FILE_LOCATION)); Quantum::iterator ii, maxii; Guard guard(this, "timex::Engine (do_stop)"); @@ -356,8 +332,8 @@ throw() { } } -void timex::Engine::kill() -throw() { +void anna::timex::Engine::kill() +{ Guard guard(this, "timex::Engine (kill)"); app::functions::component (ANNA_FILE_LOCATION)->detach(a_tickConsumer); @@ -385,8 +361,8 @@ throw() { // del proceso, con lo que evita totalmente la posiblidad de perdida. // (3) Si el temporizador ha sido reactivado no tiene que liberarlo. //---------------------------------------------------------------------------------- -void timex::Engine::tick() -throw(RuntimeException) { +void anna::timex::Engine::tick() +noexcept(false) { LOGMETHOD(TraceMethod tm(Logger::Local7, "timex::Engine", "tick", ANNA_FILE_LOCATION)); /* if (Logger::isActive (Logger::Local6) == true && a_directory.size () > 0) { @@ -462,14 +438,14 @@ throw(RuntimeException) { eventEndQuantum(counter); } -void timex::Engine::notifyRelease(timex::TimeEvent* timeEvent) -throw() { +void anna::timex::Engine::notifyRelease(timex::TimeEvent* timeEvent) +{ if(timeEvent->a_observer != NULL) timeEvent->a_observer->release(timeEvent); } -string timex::Engine::asString() const -throw() { +string anna::timex::Engine::asString() const +{ string msg("timex::Engine { "); msg += app::Component::asString(); msg += " | Max Timeout: "; @@ -483,8 +459,8 @@ throw() { return msg += " }"; } -xml::Node* timex::Engine::asXML(xml::Node* parent) const -throw() { +xml::Node* anna::timex::Engine::asXML(xml::Node* parent) const +{ parent = Component::asXML(parent); xml::Node* result = parent->createChild("timex.Engine"); result->createAttribute("MaxTimeout", a_maxTimeout);