7 #include <argos3/core/simulator/visualization/visualization.h>
8 #include <argos3/core/simulator/space/space.h>
17 static Real TVTimeToHumanReadable(::timeval& t_time) {
19 static_cast<Real>(t_time.tv_sec) +
20 static_cast<Real>(t_time.tv_usec * 10e-6);
32 m_tStepFunction = &CDefaultVisualization::RealTimeStep;
33 timerclear(&m_tStepClockTime);
35 ::gettimeofday(&m_tStepStartTime, NULL);
39 m_tStepFunction = &CDefaultVisualization::NormalStep;
49 (this->*m_tStepFunction)();
56 void CDefaultVisualization::NormalStep() {
63 void CDefaultVisualization::RealTimeStep() {
67 ::gettimeofday(&m_tStepEndTime, NULL);
69 timersub(&m_tStepEndTime, &m_tStepStartTime, &m_tStepElapsedTime);
71 if(!timercmp(&m_tStepElapsedTime, &m_tStepClockTime, >)) {
73 timersub(&m_tStepClockTime, &m_tStepElapsedTime, &m_tStepWaitTime);
75 ::usleep(m_tStepWaitTime.tv_sec * 1e6 + m_tStepWaitTime.tv_usec);
77 ::gettimeofday(&m_tStepEndTime, NULL);
80 LOGERR <<
"[WARNING] Clock tick took "
81 << TVTimeToHumanReadable(m_tStepElapsedTime)
82 <<
" sec, more than the expected "
83 << TVTimeToHumanReadable(m_tStepClockTime)
88 m_tStepStartTime.tv_sec = m_tStepEndTime.tv_sec;
89 m_tStepStartTime.tv_usec = m_tStepEndTime.tv_usec;