Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/doc/src/libraries/util/Clock.h @ 7331

Last change on this file since 7331 was 7331, checked in by rgrieder, 14 years ago

Added documentation for util/Clock.

  • Property svn:eol-style set to native
File size: 3.7 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Reto Grieder
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#ifndef _Clock_H__
30#define _Clock_H__
31
32#include "UtilPrereqs.h"
33#include "OgreForwardRefs.h"
34
35namespace orxonox
36{
37    /** Simple real time clock based on Ogre::Timer
38    @details
39        The class can be used to both capture the current real time or to
40        incrementally capture the time and then distribute that time information
41        via Clock& references (for instance for the game tick). <br>
42        Precision: <br>
43        The maximum precision is given by the Ogre::Timer and that is somewhere
44        in the microsecond range for both Windows and UNIX.
45    @remarks
46        For proper functionality this class MUST be used in the same thread! <br>
47        Further more it might be possible that the Ogre::Timer has a performance
48        caveat on Windows because it will only capture the time on the same
49        CPU core. Confining the main thread to one process could speed up the game.
50        See command line argument 'limitToCPU'.
51    */
52    class _UtilExport Clock
53    {
54    public:
55        //! Starts the time at 0
56        Clock();
57        ~Clock();
58
59        //! Internally captures the time and stays at that particular time
60        void capture();
61
62        //! Returns the last captured absolute time in microseconds
63        unsigned long long getMicroseconds() const
64            { return tickTime_; }
65        //! Returns the last captured absolute time in milliseconds
66        unsigned long long getMilliseconds() const
67            { return tickTime_ / 1000; }
68        //! Returns the last captured absolute time in seconds
69        unsigned long getSeconds() const
70            { return static_cast<long> (tickTime_ / 1000000); }
71        //! Returns the last captured absolute time in seconds as float
72        float getSecondsPrecise() const
73            { return static_cast<float>(tickTime_ / 1000000.0f); }
74
75        //! Returns the timespan in seconds between the last two calls to capture()
76        float getDeltaTime() const
77            { return tickDtFloat_; }
78        //! Returns the timespan in microseconds between the last two calls to capture()
79        long getDeltaTimeMicroseconds() const
80            { return tickDt_; }
81
82        /** Returns the current real time in microseconds
83        @note
84            This is especially useful to measure execution times because of the
85            high precision.
86        */
87        unsigned long long getRealMicroseconds() const;
88
89    private:
90        //! Undefined
91        Clock(const Clock& instance);
92
93        Ogre::Timer*       timer_;       //!< Ogre timer object
94        unsigned long long tickTime_;    //!< Currently captured time
95        long               tickDt_;      //!< Delta time in microseconds (cache value)
96        float              tickDtFloat_; //!< Delta time in seconds (cache value)
97    };
98}
99
100#endif /* _Clock_H__ */
Note: See TracBrowser for help on using the repository browser.