Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

Added Doxygen documentation for ExprParser, MathConvert, OrxEnum, OrxAssert and TriBool.
Adjusted Doxygen documentation for Clock and Exception.

  • Property svn:eol-style set to native
File size: 4.2 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    @par Precision
44        The maximum precision is given by the Ogre::Timer and that is somewhere
45        in the microsecond range for both Windows and UNIX.
46    @par Remarks for Usage on Windows
47        For proper functionality this class MUST be used in the same thread! <br>
48        Furthermore it might be possible that the Ogre::Timer has a performance
49        caveat because it will only capture the time on the same CPU core.
50        Confining the main thread to one process could speed up the game.
51        See \ref cmdargspage "Ccommandline Argument" 'limitToCPU' (only on Windows)
52    */
53    class _UtilExport Clock
54    {
55    public:
56        /// Starts the time at 0
57        Clock();
58        ~Clock();
59
60        /** Internally captures the time and stays at that particular time
61        @remarks
62            Mind the types! Ogre::Timer::getMicroseconds() will return an unsigned
63            long, which will eventually overflow. But if you use the subtraction of
64            the current time minus the last time the timer gave us and sum these up to
65            a 64 bit integer, we get the desired result. <br>
66            Also mind that we don't have to store the last timer's time as unsigned long
67            as well because (unsigned long)tickTime_ will do exactly that.
68        */
69        void capture();
70
71        /// Returns the last captured absolute time in microseconds
72        unsigned long long getMicroseconds() const
73            { return tickTime_; }
74        /// Returns the last captured absolute time in milliseconds
75        unsigned long long getMilliseconds() const
76            { return tickTime_ / 1000; }
77        /// Returns the last captured absolute time in seconds
78        unsigned long getSeconds() const
79            { return static_cast<long> (tickTime_ / 1000000); }
80        /// Returns the last captured absolute time in seconds as float
81        float getSecondsPrecise() const
82            { return static_cast<float>(tickTime_ / 1000000.0f); }
83
84        /// Returns the timespan in seconds between the last two calls to capture()
85        float getDeltaTime() const
86            { return tickDtFloat_; }
87        /// Returns the timespan in microseconds between the last two calls to capture()
88        long getDeltaTimeMicroseconds() const
89            { return tickDt_; }
90
91        /** Returns the current real time in microseconds
92        @note
93            This is especially useful to measure execution times because of the
94            high precision.
95        */
96        unsigned long long getRealMicroseconds() const;
97
98    private:
99        /// Undefined
100        Clock(const Clock& instance);
101
102        Ogre::Timer*       timer_;       ///< Ogre timer object
103        unsigned long long tickTime_;    ///< Currently captured time
104        long               tickDt_;      ///< Delta time in microseconds (cache value)
105        float              tickDtFloat_; ///< Delta time in seconds (cache value)
106    };
107}
108
109#endif /* _Clock_H__ */
Note: See TracBrowser for help on using the repository browser.