2
0
mirror of https://github.com/boostorg/thread.git synced 2026-02-03 09:42:16 +00:00
Files
thread/src/xtime.cpp
William E. Kempf 9b5f666fc5 Removed tabs and trailing white space.
[SVN r11403]
2001-10-18 19:56:32 +00:00

57 lines
1.8 KiB
C++

// Copyright (C) 2001
// William E. Kempf
//
// Permission to use, copy, modify, distribute and sell this software
// and its documentation for any purpose is hereby granted without fee,
// provided that the above copyright notice appear in all copies and
// that both that copyright notice and this permission notice appear
// in supporting documentation. William E. Kempf makes no representations
// about the suitability of this software for any purpose.
// It is provided "as is" without express or implied warranty.
#include <boost/thread/xtime.hpp>
#if defined(BOOST_HAS_FTIME)
# include <windows.h>
#elif defined(BOOST_HAS_GETTIMEOFDAY)
# include <sys/time.h>
#endif
namespace boost {
int xtime_get(struct xtime* xtp, int clock_type)
{
if (clock_type == TIME_UTC)
{
#if defined(BOOST_HAS_FTIME)
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
const boost::uint64_t TIMESPEC_TO_FILETIME_OFFSET = ((boost::uint64_t)27111902UL << 32) + (boost::uint64_t)3577643008UL;
xtp->sec = (int)((*(__int64*)&ft - TIMESPEC_TO_FILETIME_OFFSET) / 10000000);
xtp->nsec = (int)((*(__int64*)&ft - TIMESPEC_TO_FILETIME_OFFSET -
((__int64)xtp->sec * (__int64)10000000)) * 100);
return clock_type;
#elif defined(BOOST_HAS_GETTIMEOFDAY)
struct timeval tv;
gettimeofday(&tv, 0);
xtp->sec = tv.tv_sec;
xtp->nsec = tv.tv_usec * 1000;
return clock_type;
#elif defined(BOOST_HAS_CLOCK_GETTIME)
timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
xtp->sec = ts.tv_sec;
xtp->nsec = ts.tv_nsec;
return clock_type;
#else
# error "xtime_get implementation undefined"
#endif
}
return 0;
}
} // namespace boost
// Change Log:
// 8 Feb 01 WEKEMPF Initial version.