#include "irrlichttypes.h" // u32
#include "debug.h"
#include "constants.h"
+#include "gettime.h"
+#include "threads.h"
#ifdef _MSC_VER
#define SWPRINTF_CHARSTRING L"%S"
//#define ALIGNOF(type) offsetof (alignment_trick<type>, member)
#ifdef _WIN32
+ #ifndef _WIN32_WINNT
+ #define _WIN32_WINNT 0x0501
+ #endif
#include <windows.h>
#define sleep_ms(x) Sleep(x)
#else
#include <unistd.h>
#include <stdint.h> //for uintptr_t
-
- #if defined(linux) || defined(__linux)
+
+ #if (defined(linux) || defined(__linux)) && !defined(_GNU_SOURCE)
#define _GNU_SOURCE
#endif
#define THREAD_PRIORITY_BELOW_NORMAL 1
#define THREAD_PRIORITY_NORMAL 2
#define THREAD_PRIORITY_ABOVE_NORMAL 3
- #define THREAD_PRIORITY_HIGHEST 4
+ #define THREAD_PRIORITY_HIGHEST 4
#endif
#ifdef _MSC_VER
Overflow can occur at any value higher than 10000000.
*/
#ifdef _WIN32 // Windows
+#ifndef _WIN32_WINNT
+ #define _WIN32_WINNT 0x0501
+#endif
#include <windows.h>
+
+ inline u32 getTimeS()
+ {
+ return GetTickCount() / 1000;
+ }
+
inline u32 getTimeMs()
{
return GetTickCount();
}
+
+ inline u32 getTimeUs()
+ {
+ LARGE_INTEGER freq, t;
+ QueryPerformanceFrequency(&freq);
+ QueryPerformanceCounter(&t);
+ return (double)(t.QuadPart) / ((double)(freq.QuadPart) / 1000000.0);
+ }
+
+ inline u32 getTimeNs()
+ {
+ LARGE_INTEGER freq, t;
+ QueryPerformanceFrequency(&freq);
+ QueryPerformanceCounter(&t);
+ return (double)(t.QuadPart) / ((double)(freq.QuadPart) / 1000000000.0);
+ }
+
#else // Posix
#include <sys/time.h>
+ #include <time.h>
+
+ inline u32 getTimeS()
+ {
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ return tv.tv_sec;
+ }
+
inline u32 getTimeMs()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
+
+ inline u32 getTimeUs()
+ {
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ return tv.tv_sec * 1000000 + tv.tv_usec;
+ }
+
+ inline u32 getTimeNs()
+ {
+ struct timespec ts;
+ clock_gettime(CLOCK_REALTIME, &ts);
+ return ts.tv_sec * 1000000000 + ts.tv_nsec;
+ }
+
/*#include <sys/timeb.h>
inline u32 getTimeMs()
{
}*/
#endif
+inline u32 getTime(TimePrecision prec)
+{
+ switch (prec) {
+ case PRECISION_SECONDS:
+ return getTimeS();
+ case PRECISION_MILLI:
+ return getTimeMs();
+ case PRECISION_MICRO:
+ return getTimeUs();
+ case PRECISION_NANO:
+ return getTimeNs();
+ }
+ return 0;
+}
+
+
} // namespace porting
#endif // PORTING_HEADER