X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=source%2Ftimex%2FEngine.cpp;h=396e438baecaf33b1d7ef8869808deefca88f77a;hb=609c79ead77490f99f3f34836b19820999a85169;hp=ae7f17e4017a17bb48f7796413a88bcdfe804bb1;hpb=5256cb543a9d35b610df19bd227cde977186aef0;p=anna.git diff --git a/source/timex/Engine.cpp b/source/timex/Engine.cpp index ae7f17e..396e438 100644 --- a/source/timex/Engine.cpp +++ b/source/timex/Engine.cpp @@ -1,37 +1,9 @@ -// ANNA - Anna is Not Nothingness Anymore -// -// (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo -// -// http://redmine.teslayout.com/projects/anna-suite -// -// 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 the copyright holder 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,10 +31,10 @@ 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 anna::timex::Engine::minResolution(100); +const Millisecond anna::timex::Engine::minResolution(10); anna::timex::Engine::Engine(const Millisecond & maxTimeout, const Millisecond & resolution) : @@ -93,7 +65,7 @@ anna::timex::Engine::~Engine() { // en que realmente llega la seal de ualarm. //-------------------------------------------------------------------------------------------- void anna::timex::Engine::do_initialize() -throw(RuntimeException) { +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); @@ -140,7 +116,7 @@ throw(RuntimeException) { // Reimplementado de app::Component void anna::timex::Engine::do_cloneParent() -throw() { +{ } /* @@ -148,7 +124,7 @@ throw() { * Instala la senhal de tick en el proceso, ya que la alarma no se hereda directamente. */ void anna::timex::Engine::do_cloneChild() -throw(RuntimeException) { +noexcept(false) { } //---------------------------------------------------------------------------- @@ -156,7 +132,7 @@ throw(RuntimeException) { // en el 'pipe'. //---------------------------------------------------------------------------- void anna::timex::Engine::pause() -throw(RuntimeException) { +noexcept(false) { Guard guard(this, "timex::Engine (pause)"); if(a_tickProducer->isInPause() == false) { @@ -170,7 +146,7 @@ throw(RuntimeException) { } void anna::timex::Engine::play() -throw(RuntimeException) { +noexcept(false) { Guard guard(this, "timex::Engine (play)"); if(a_tickProducer->isInPause() == true) { @@ -184,7 +160,7 @@ throw(RuntimeException) { } void anna::timex::Engine::activate(timex::TimeEvent* timeEvent) -throw(RuntimeException) { +noexcept(false) { LOGMETHOD(TraceMethod tm(Logger::Local7, "timex::Engine", "activate", ANNA_FILE_LOCATION)); if(a_maxQuantum == 0) @@ -253,7 +229,7 @@ throw(RuntimeException) { } anna::timex::TimeEvent* anna::timex::Engine::getTimeEvent(const timex::TimeEvent::Id eventTimeId) -throw() { +{ LOGMETHOD(TraceMethod tm(Logger::Local7, "timex::Engine", "getTimeEvent", ANNA_FILE_LOCATION)); Directory::iterator iid; TimeEvent* result(NULL); @@ -277,7 +253,7 @@ throw() { } void anna::timex::Engine::cancel(timex::TimeEvent* timeEvent) -throw(RuntimeException) { +noexcept(false) { LOGMETHOD(TraceMethod tm(Logger::Local7, "timex::Engine", "cancel", ANNA_FILE_LOCATION)); if(timeEvent == NULL) @@ -325,7 +301,7 @@ throw(RuntimeException) { } void anna::timex::Engine::do_stop() -throw() { +{ LOGMETHOD(TraceMethod tm("timex::Engine", "do_stop", ANNA_FILE_LOCATION)); Quantum::iterator ii, maxii; Guard guard(this, "timex::Engine (do_stop)"); @@ -357,7 +333,7 @@ throw() { } void anna::timex::Engine::kill() -throw() { +{ Guard guard(this, "timex::Engine (kill)"); app::functions::component (ANNA_FILE_LOCATION)->detach(a_tickConsumer); @@ -386,7 +362,7 @@ throw() { // (3) Si el temporizador ha sido reactivado no tiene que liberarlo. //---------------------------------------------------------------------------------- void anna::timex::Engine::tick() -throw(RuntimeException) { +noexcept(false) { LOGMETHOD(TraceMethod tm(Logger::Local7, "timex::Engine", "tick", ANNA_FILE_LOCATION)); /* if (Logger::isActive (Logger::Local6) == true && a_directory.size () > 0) { @@ -463,13 +439,13 @@ throw(RuntimeException) { } void anna::timex::Engine::notifyRelease(timex::TimeEvent* timeEvent) -throw() { +{ if(timeEvent->a_observer != NULL) timeEvent->a_observer->release(timeEvent); } string anna::timex::Engine::asString() const -throw() { +{ string msg("timex::Engine { "); msg += app::Component::asString(); msg += " | Max Timeout: "; @@ -484,7 +460,7 @@ throw() { } xml::Node* anna::timex::Engine::asXML(xml::Node* parent) const -throw() { +{ parent = Component::asXML(parent); xml::Node* result = parent->createChild("timex.Engine"); result->createAttribute("MaxTimeout", a_maxTimeout);