SLProject  4.3.020
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
SENSSimClock Class Reference

#include <SENSSimClock.h>

Public Member Functions

 SENSSimClock (SENSTimePt startTimePt, SENSTimePt simStartTimePt)
 
void pause ()
 pause simulation More...
 
bool isPaused () const
 
void resume ()
 resume simulation More...
 
void reset ()
 
SENSMicroseconds passedTime () const
 get passed simulation time More...
 
SENSTimePt now () const
 get current simulation time (const function which should be thread save) More...
 

Private Attributes

std::atomic_bool _pause {true}
 atomic, because we use it in now without mutex More...
 
SENSTimePt _pauseTimePt
 
std::mutex _pauseMutex
 
SENSMicroseconds _pauseTime {0}
 Offset from pause state: we have to accumulate pause times and subtract it from sim time. More...
 
SENSTimePt _startTimePt
 real start time point in the present (when SENSSimulation::start was called) More...
 
SENSTimePt _simStartTimePt
 start time point of simulation in the past More...
 

Detailed Description

SENSSimClock Clock used for sensor simulation in SENSSimulator and SENSSimulated

Definition at line 11 of file SENSSimClock.h.

Constructor & Destructor Documentation

◆ SENSSimClock()

SENSSimClock::SENSSimClock ( SENSTimePt  startTimePt,
SENSTimePt  simStartTimePt 
)
inline

Definition at line 14 of file SENSSimClock.h.

15  : _startTimePt(startTimePt),
16  _simStartTimePt(simStartTimePt)
17  {
18  _pause = true;
19  _pauseTimePt = (SENSTimePt)SENSClock::now();
20  }
std::chrono::high_resolution_clock::time_point SENSTimePt
Definition: SENS.h:57
SENSTimePt _pauseTimePt
Definition: SENSSimClock.h:90
SENSTimePt _simStartTimePt
start time point of simulation in the past
Definition: SENSSimClock.h:99
SENSTimePt _startTimePt
real start time point in the present (when SENSSimulation::start was called)
Definition: SENSSimClock.h:97
std::atomic_bool _pause
atomic, because we use it in now without mutex
Definition: SENSSimClock.h:89

Member Function Documentation

◆ isPaused()

bool SENSSimClock::isPaused ( ) const
inline

Definition at line 30 of file SENSSimClock.h.

31  {
32  return _pause;
33  }

◆ now()

SENSTimePt SENSSimClock::now ( ) const
inline

get current simulation time (const function which should be thread save)

Definition at line 71 of file SENSSimClock.h.

72  {
73  SENSMicroseconds passedSimTime;
74  if (_pause)
75  {
76  const std::lock_guard<std::mutex> lock(_pauseMutex);
77  passedSimTime = std::chrono::duration_cast<SENSMicroseconds>(_pauseTimePt - _startTimePt) - _pauseTime;
78  }
79  else
80  {
81  passedSimTime = std::chrono::duration_cast<SENSMicroseconds>((SENSTimePt)SENSClock::now() - _startTimePt) - _pauseTime;
82  }
83 
84  return _simStartTimePt + passedSimTime;
85  }
std::chrono::microseconds SENSMicroseconds
Definition: SENS.h:58
SENSMicroseconds _pauseTime
Offset from pause state: we have to accumulate pause times and subtract it from sim time.
Definition: SENSSimClock.h:95
std::mutex _pauseMutex
Definition: SENSSimClock.h:92

◆ passedTime()

SENSMicroseconds SENSSimClock::passedTime ( ) const
inline

get passed simulation time

Definition at line 54 of file SENSSimClock.h.

55  {
56  SENSMicroseconds passedSimTime;
57  if (_pause)
58  {
59  const std::lock_guard<std::mutex> lock(_pauseMutex);
60  passedSimTime = std::chrono::duration_cast<SENSMicroseconds>(_pauseTimePt - _startTimePt) - _pauseTime;
61  }
62  else
63  {
64  passedSimTime = std::chrono::duration_cast<SENSMicroseconds>((SENSTimePt)SENSClock::now() - _startTimePt) - _pauseTime;
65  }
66 
67  return passedSimTime;
68  }

◆ pause()

void SENSSimClock::pause ( )
inline

pause simulation

Definition at line 23 of file SENSSimClock.h.

24  {
25  std::lock_guard<std::mutex> lock(_pauseMutex);
26  _pause = true;
27  _pauseTimePt = (SENSTimePt)SENSClock::now();
28  }

◆ reset()

void SENSSimClock::reset ( )
inline

reset simulation (we switch to pause when setting new start, in this way now becomes thread save and we increase performance of now() (no mutex in nomal use))

Definition at line 45 of file SENSSimClock.h.

46  {
47  pause();
48  _startTimePt = SENSClock::now();
50  resume();
51  }
void pause()
pause simulation
Definition: SENSSimClock.h:23
void resume()
resume simulation
Definition: SENSSimClock.h:36

◆ resume()

void SENSSimClock::resume ( )
inline

resume simulation

Definition at line 36 of file SENSSimClock.h.

37  {
38  std::lock_guard<std::mutex> lock(_pauseMutex);
39  _pause = false;
40  _pauseTime = _pauseTime + std::chrono::duration_cast<SENSMicroseconds>((SENSTimePt)SENSClock::now() - _pauseTimePt);
41  }

Member Data Documentation

◆ _pause

std::atomic_bool SENSSimClock::_pause {true}
private

atomic, because we use it in now without mutex

Definition at line 89 of file SENSSimClock.h.

◆ _pauseMutex

std::mutex SENSSimClock::_pauseMutex
mutableprivate

Definition at line 92 of file SENSSimClock.h.

◆ _pauseTime

SENSMicroseconds SENSSimClock::_pauseTime {0}
private

Offset from pause state: we have to accumulate pause times and subtract it from sim time.

Definition at line 95 of file SENSSimClock.h.

◆ _pauseTimePt

SENSTimePt SENSSimClock::_pauseTimePt
private

Definition at line 90 of file SENSSimClock.h.

◆ _simStartTimePt

SENSTimePt SENSSimClock::_simStartTimePt
private

start time point of simulation in the past

Definition at line 99 of file SENSSimClock.h.

◆ _startTimePt

SENSTimePt SENSSimClock::_startTimePt
private

real start time point in the present (when SENSSimulation::start was called)

Definition at line 97 of file SENSSimClock.h.


The documentation for this class was generated from the following file: