42 #include <visp3/core/vpDebug.h>
43 #include <visp3/core/vpTime.h>
46 #if VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11 && \
47 (defined(_MSC_VER) && _MSC_VER >= 1900 || !defined(_MSC_VER))
48 #define USE_CXX11_CHRONO 1
50 #define USE_CXX11_CHRONO 0
60 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
68 #ifndef DOXYGEN_SHOULD_SKIP_THIS
80 static const double minTimeForUsleepCall = 4;
97 std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
98 return std::chrono::duration<double, std::micro>(now.time_since_epoch()).count();
102 LARGE_INTEGER time, frequency;
103 QueryPerformanceFrequency(&frequency);
104 if (frequency.QuadPart == 0) {
105 return (timeGetTime());
107 QueryPerformanceCounter(&time);
108 return (
double)(1000000.0 * time.QuadPart / frequency.QuadPart);
113 #elif !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
115 gettimeofday(&tp, 0);
116 return (1000000.0 * tp.tv_sec + tp.tv_usec);
130 std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
131 return std::chrono::duration<double, std::milli>(now.time_since_epoch()).count();
135 LARGE_INTEGER time, frequency;
136 QueryPerformanceFrequency(&frequency);
137 if (frequency.QuadPart == 0) {
138 return (timeGetTime());
140 QueryPerformanceCounter(&time);
141 return (
double)(1000.0 * time.QuadPart / frequency.QuadPart);
146 #elif !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
148 gettimeofday(&tp, 0);
149 return (1000.0 * tp.tv_sec + tp.tv_usec / 1000.0);
174 int wait(
double t0,
double t)
176 double timeCurrent, timeToWait;
179 timeToWait = t0 + t - timeCurrent;
181 if (timeToWait <= 0.)
184 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
185 if (timeToWait > vpTime::minTimeForUsleepCall) {
186 usleep((useconds_t)((timeToWait - vpTime::minTimeForUsleepCall) * 1000));
191 timeToWait = t0 + t - timeCurrent;
193 }
while (timeToWait > 0.);
196 #elif defined(_WIN32)
197 #if !defined(WINRT_8_0)
198 if (timeToWait > vpTime::minTimeForUsleepCall) {
199 Sleep((DWORD)(timeToWait - vpTime::minTimeForUsleepCall));
204 timeToWait = t0 + t - timeCurrent;
206 }
while (timeToWait > 0.);
211 "vpTime::wait() is not implemented on Windows Phone 8.0"));
227 double timeToWait = t;
229 if (timeToWait <= 0.)
232 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
234 if (timeToWait > vpTime::minTimeForUsleepCall) {
235 usleep((useconds_t)((timeToWait - vpTime::minTimeForUsleepCall) * 1000));
240 timeToWait = t0 + t - timeCurrent;
242 }
while (timeToWait > 0.);
245 #elif defined(_WIN32)
246 #if !defined(WINRT_8_0)
248 if (timeToWait > vpTime::minTimeForUsleepCall) {
249 Sleep((DWORD)(timeToWait - vpTime::minTimeForUsleepCall));
254 timeToWait = t0 + t - timeCurrent;
256 }
while (timeToWait > 0.);
261 "vpTime::wait() is not implemented on Windows Phone 8.0"));
274 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
275 usleep((useconds_t)(t * 1000));
276 #elif defined(_WIN32)
277 #if !defined(WINRT_8_0)
281 "vpTime::sleepMs() is not implemented on Windows Phone 8.0"));
366 timeinfo = localtime(&rawtime);
368 strftime(buffer, 80, format.c_str(), timeinfo);
369 std::string str(buffer);
374 #ifndef DOXYGEN_SHOULD_SKIP_THIS
402 m_lastTimePoint = std::chrono::steady_clock::now();
417 m_durationMs += std::chrono::duration<double, std::milli>(std::chrono::steady_clock::now() - m_lastTimePoint).count();
void start(bool reset=true)
double getDurationSeconds()
double getDurationMicros()
error that can be emited by ViSP classes.
@ functionNotImplementedError
Function not implemented.
Time management and measurement.
VISP_EXPORT int wait(double t0, double t)
VISP_EXPORT double measureTimeMicros()
VISP_EXPORT double getMinTimeForUsleepCall()
VISP_EXPORT double measureTimeSecond()
VISP_EXPORT void sleepMs(double t)
VISP_EXPORT std::string getDateTime(const std::string &format="%Y/%m/%d %H:%M:%S")
VISP_EXPORT double measureTimeMs()