7 #include <argos3/core/simulator/visualization/default_visualization.h>
8 #include <argos3/core/simulator/space/space.h>
9 #include <argos3/core/simulator/loop_functions.h>
18 static Real TVTimeToHumanReadable(::timeval& t_time) {
20 static_cast<Real>(t_time.tv_sec) +
21 static_cast<Real>(t_time.tv_usec * 10e-6);
31 m_tStepFunction = &CDefaultVisualization::RealTimeStep;
32 timerclear(&m_tStepClockTime);
34 ::gettimeofday(&m_tStepStartTime, NULL);
38 m_tStepFunction = &CDefaultVisualization::NormalStep;
48 (this->*m_tStepFunction)();
59 void CDefaultVisualization::NormalStep() {
66 void CDefaultVisualization::RealTimeStep() {
70 ::gettimeofday(&m_tStepEndTime, NULL);
72 timersub(&m_tStepEndTime, &m_tStepStartTime, &m_tStepElapsedTime);
74 if(!timercmp(&m_tStepElapsedTime, &m_tStepClockTime, >)) {
76 timersub(&m_tStepClockTime, &m_tStepElapsedTime, &m_tStepWaitTime);
78 ::usleep(m_tStepWaitTime.tv_sec * 1e6 + m_tStepWaitTime.tv_usec);
80 ::gettimeofday(&m_tStepEndTime, NULL);
83 LOGERR <<
"[WARNING] Clock tick took "
84 << TVTimeToHumanReadable(m_tStepElapsedTime)
85 <<
" sec, more than the expected "
86 << TVTimeToHumanReadable(m_tStepClockTime)
91 m_tStepStartTime.tv_sec = m_tStepEndTime.tv_sec;
92 m_tStepStartTime.tv_usec = m_tStepEndTime.tv_usec;