eoTimedMonitor.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
00002 
00003 //-----------------------------------------------------------------------------
00004 // eoTimedMonitor.h
00005 // (c) Marc Schoenauer, Maarten Keijzer and GeNeura Team, 2005
00006 /* 
00007     This library is free software; you can redistribute it and/or
00008     modify it under the terms of the GNU Lesser General Public
00009     License as published by the Free Software Foundation; either
00010     version 2 of the License, or (at your option) any later version.
00011 
00012     This library is distributed in the hope that it will be useful,
00013     but WITHOUT ANY WARRANTY; without even the implied warranty of
00014     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015     Lesser General Public License for more details.
00016 
00017     You should have received a copy of the GNU Lesser General Public
00018     License along with this library; if not, write to the Free Software
00019     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00020 
00021     Contact: todos@geneura.ugr.es, http://geneura.ugr.es
00022              Marc.Schoenauer@polytechnique.fr
00023              mkeijzer@dhi.dk
00024  */
00025 //-----------------------------------------------------------------------------
00026 
00027 #ifndef _eoTimedMonitor_h
00028 #define _eoTimedMonitor_h
00029 
00030 #include <string>
00031 
00032 #include <utils/eoMonitor.h>
00033 #include <eoObject.h>
00034 #include <time.h>
00035 
00040 class eoTimedMonitor : public eoMonitor
00041 {
00042 public :
00043     eoTimedMonitor(int seconds_) : seconds(seconds_), last_tick(0) {}
00044     
00045     eoMonitor& operator()(void) {
00046         bool monitor = false;
00047         if (last_tick == 0) {
00048             monitor = true;
00049             last_tick = clock();
00050         }
00051 
00052         clock_t tick = clock();
00053 
00054         if ( (tick-last_tick) >= seconds * CLOCKS_PER_SEC) {
00055             monitor = true;
00056         }
00057 
00058         if (monitor) {
00059             for (unsigned i = 0; i < monitors.size(); ++i) {
00060                 (*monitors[i])();
00061             }
00062             last_tick = clock();
00063         }
00064         return *this;
00065     }
00066 
00067     void add(eoMonitor& mon) { monitors.push_back(&mon); }
00068     
00069   virtual std::string className(void) const { return "eoTimedMonitor"; }
00070 private :
00071   clock_t last_tick;
00072   int seconds;
00073   std::vector<eoMonitor*> monitors;
00074 };
00075 
00076 #endif

Generated on Thu Apr 19 11:02:28 2007 for EO by  doxygen 1.4.7