| VRS - The Virtual Rendering System |
| version 3.3 |
00001 /****************************************************************************** 00002 * VRS - The Virtual Rendering System 00003 * Copyright (C) 2000-2008 Computer Graphics Systems Group at the 00004 * Hasso-Plattner-Institute (HPI), Potsdam, Germany. 00005 * 00006 * This library is free software; you can redistribute it and/or modify it 00007 * under the terms of the GNU Lesser General Public License as published by 00008 * the Free Software Foundation; either version 2.1 of the License, or (at 00009 * your option) any later version. This library is distributed in the hope 00010 * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied 00011 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU Lesser General Public License for more details. You should have received 00013 * a copy of the GNU Lesser+ General Public License along with this library; if 00014 * not, write to the FreeSoftware Foundation, Inc., 59 Temple Place, Suite 330, 00015 * Boston, MA, 02111-1307, USA. 00016 ******************************************************************************/ 00017 00018 #ifndef VRS_SG_CLOCK_H 00019 #define VRS_SG_CLOCK_H 00020 00021 #include <vrs/sharedobj.h> 00022 #include <vrs/time.h> 00023 #include <vrs/sg/moment.h> 00024 00025 #include <vector> 00026 00027 namespace VRS { 00028 00029 class Manager; 00030 class TimeEvent; 00031 00033 class VRS_CORE_API Clock : public SharedObj { 00034 public: 00035 Clock(bool isARealTimeClock = true, double delayInSec = 0.001); 00041 00042 virtual void start() { } 00043 00045 virtual void stop() { } 00046 00047 void tick(const VRSTime& now); 00049 00050 void setDelay(double delayInSec); 00051 double getDelay() const; 00052 /* To prevent that too many time events are sent, a delay>0 00053 can be set which defines the minimal time interval between 00054 two subsequent time events. */ 00055 00056 void addManager(Manager* mgr); 00057 void removeManager(Manager* mgr); 00058 bool hasManager(Manager* mgr) const; 00059 void copyManagers(Clock* anotherClock) const; 00063 virtual VRSTime time(); 00064 bool isRealTime() const; 00069 static Clock* systemClock(); 00070 /* Returns the clock object that represents the system-wide 00071 realtime clock. In general, the system clock is provided 00072 by GUI-specific packages of VRS and is implemented as 00073 part of the GUI-specific canvas classes. */ 00074 00075 VRS_TYPEINFO(Clock, SharedObj); 00076 00077 private: 00078 struct TimeSlave { 00079 Manager* manager; // the one who receives the time 00080 double start; // the time at which the client was added 00081 double due; // when the next call is due 00082 }; 00083 00084 std::vector<TimeSlave> m_manager; 00085 SO<TimeEvent> event_; 00086 double delay_; 00087 Moment m_lastMoment; 00088 bool isRealTime_; 00089 }; 00090 00091 } // namespace VRS 00092 00093 #endif // VRS_SG_CLOCK_H