-/*
-This file is part of libmspcore
-Copyright © 2006 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
#ifdef WIN32
#include <windows.h>
#else
#include <sys/resource.h>
#include <sys/time.h>
+#include <cerrno>
#endif
+#include <msp/core/systemerror.h>
#include "datetime.h"
#include "timedelta.h"
#include "timestamp.h"
namespace Msp {
namespace Time {
-/**
-Returns the current timestamp.
-*/
TimeStamp now()
{
#ifndef WIN32
gettimeofday(&tv, 0);
return TimeStamp(tv.tv_sec*1000000LL+tv.tv_usec);
#else
- static RawTime epoch=0;
+ static RawTime epoch = 0;
if(!epoch)
{
SYSTEMTIME st;
- st.wYear=1970;
- st.wMonth=1;
- st.wDay=1;
- st.wHour=0;
- st.wMinute=0;
- st.wSecond=0;
- st.wMilliseconds=0;
+ st.wYear = 1970;
+ st.wMonth = 1;
+ st.wDay = 1;
+ st.wHour = 0;
+ st.wMinute = 0;
+ st.wSecond = 0;
+ st.wMilliseconds = 0;
FILETIME ft;
SystemTimeToFileTime(&st, &ft);
- epoch=(ft.dwLowDateTime+(static_cast<RawTime>(ft.dwHighDateTime)<<32))/10;
+ epoch = (ft.dwLowDateTime+(static_cast<RawTime>(ft.dwHighDateTime)<<32))/10;
}
FILETIME ft;
return DateTime(now()).format(fmt);
}
-/**
-Returns the CPU time used by the program so far.
-*/
TimeDelta get_cpu_time()
{
#ifndef WIN32
#endif
}
-/**
-Sleeps for the given time.
-*/
-int sleep(const TimeDelta &d)
+void sleep(const TimeDelta &d)
{
#ifndef WIN32
- timespec ts;
- d.fill_timespec(ts);
- return nanosleep(&ts, 0);
+ timespec ts = d;
+ while(nanosleep(&ts, 0)==-1)
+ if(errno!=EINTR)
+ throw system_error("nanosleep");
#else
Sleep((DWORD)(d/msec));
- return 0;
#endif
}