-/*
-This file is part of libmspframework
-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 "rawtime_private.h"
#include "timedelta.h"
#include "timestamp.h"
#include "units.h"
#include "utils.h"
+using namespace std;
+
namespace Msp {
namespace Time {
-/**
-Returns the current timestamp.
-*/
TimeStamp now()
{
+#ifndef WIN32
timeval tv;
gettimeofday(&tv, 0);
- return TimeStamp(tv.tv_sec*1000000LL+tv.tv_usec);
+ return TimeStamp(timeval_to_rawtime(tv));
+#else
+ FILETIME ft;
+ GetSystemTimeAsFileTime(&ft);
+ return TimeStamp(filetime_to_rawtime(ft));
+#endif
+}
+
+string format_now(const string &fmt)
+{
+ return DateTime(now()).format(fmt);
}
-/**
-Returns the CPU time used by the program so far.
-*/
TimeDelta get_cpu_time()
{
+#ifndef WIN32
rusage ru;
getrusage(RUSAGE_SELF, &ru);
return (ru.ru_utime.tv_sec+ru.ru_stime.tv_sec)*sec + (ru.ru_utime.tv_usec+ru.ru_stime.tv_usec)*usec;
+#else
+ //XXX Figure out the function to use on Win32
+ return TimeDelta();
+#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 = rawtime_to_timespec(d.raw());
+ while(nanosleep(&ts, 0)==-1)
+ if(errno!=EINTR)
+ throw system_error("nanosleep");
#else
- Sleep(d/msec);
- return 0;
+ Sleep((DWORD)(d/msec));
#endif
}