X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fthreads%2FSGThread.cxx;h=c7a841b02bb9d8b0ddb3dadbf3621baca0812ca5;hb=6a7c2000027cd22eea603e936ddbad1a5bfc8b04;hp=ac3ee93343b2bdf7d6a3c02a7cb21afde0b3ba85;hpb=e2b4c0787a4398199ef2d35e05963acd58b7a04c;p=simgear.git diff --git a/simgear/threads/SGThread.cxx b/simgear/threads/SGThread.cxx index ac3ee933..c7a841b0 100644 --- a/simgear/threads/SGThread.cxx +++ b/simgear/threads/SGThread.cxx @@ -1,5 +1,18 @@ #include -#include + +#if defined(_MSC_VER) || defined(__MINGW32__) +# include +#else +# if defined ( sgi ) && !defined( __GNUC__ ) + // This works around a bug triggered when using MipsPro 7.4.1 + // and (at least) IRIX 6.5.20 +# include +# endif +# include +#endif +#if _MSC_VER >= 1300 +# include +#endif #include "SGThread.hxx" @@ -44,8 +57,33 @@ SGMutex::trylock() return true; } +#if defined(_MSC_VER) || defined(__MINGW32__) +int gettimeofday(struct timeval* tp, void* tzp) { + LARGE_INTEGER t; + + if(QueryPerformanceCounter(&t)) { + /* hardware supports a performance counter */ + LARGE_INTEGER f; + QueryPerformanceFrequency(&f); + tp->tv_sec = t.QuadPart/f.QuadPart; + tp->tv_usec = ((float)t.QuadPart/f.QuadPart*1000*1000) + - (tp->tv_sec*1000*1000); + } else { + /* hardware doesn't support a performance counter, so get the + time in a more traditional way. */ + DWORD t; + t = timeGetTime(); + tp->tv_sec = t / 1000; + tp->tv_usec = t % 1000; + } + + /* 0 indicates that the call succeeded. */ + return 0; +} +#endif + bool -SGCondition::wait( SGMutex& mutex, unsigned long ms ) +SGPthreadCond::wait( SGMutex& mutex, unsigned long ms ) { struct timeval now; ::gettimeofday( &now, 0 );