Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/mergeFS18/src/libraries/util/Clock.h @ 12394

Last change on this file since 12394 was 11099, checked in by muemart, 9 years ago

Fix loads of doxygen warnings and other documentation issues

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