return 0;
}
+#if !defined(HAS_GETTIMEOFDAY) && defined(WIN32)
+#define HAS_GETTIMEOFDAY
+
+/* shows up in winsock.h?
+struct timeval {
+ long tv_sec;
+ long tv_usec;
+}
+*/
+
+typedef union {
+ unsigned __int64 ft_i64;
+ FILETIME ft_val;
+} FT_t;
+
+/* Number of 100 nanosecond units from 1/1/1601 to 1/1/1970 */
+#ifdef __GNUC__
+#define Const64(x) x##LL
+#else
+#define Const64(x) x##i64
+#endif
+#define EPOCH_BIAS Const64(116444736000000000)
+
+/* NOTE: This does not compute the timezone info (doing so can be expensive,
+ * and appears to be unsupported even by glibc) */
+int
+gettimeofday (struct timeval *tp, void *not_used)
+{
+ FT_t ft;
+
+ /* this returns time in 100-nanosecond units (i.e. tens of usecs) */
+ GetSystemTimeAsFileTime(&ft.ft_val);
+
+ /* seconds since epoch */
+ tp->tv_sec = (long)((ft.ft_i64 - EPOCH_BIAS) / Const64(10000000));
+
+ /* microseconds remaining */
+ tp->tv_usec = (long)((ft.ft_i64 / Const64(10)) % Const64(1000000));
+
+ return 0;
+}
+#endif
+
#if !defined(HAS_GETTIMEOFDAY) && defined(VMS)
#define HAS_GETTIMEOFDAY
{
struct timeval Tp;
int status;
- status = PerlProc_gettimeofday(&Tp,NULL);
+ status = gettimeofday (&Tp, NULL);
ret[0] = Tp.tv_sec;
ret[1] = Tp.tv_usec;
return status;
{
struct timeval Tp;
int status;
- status = PerlProc_gettimeofday(&Tp,NULL);
+ status = gettimeofday (&Tp, NULL);
return status == 0 ? Tp.tv_sec + (Tp.tv_usec / 1000000.) : -1.0;
}
PREINIT:
struct timeval Ta, Tb;
CODE:
- PerlProc_gettimeofday(&Ta,NULL);
+ gettimeofday(&Ta, NULL);
if (items > 0) {
if (useconds > 1E6) {
IV seconds = (IV) (useconds / 1E6);
usleep((UV)useconds);
} else
PerlProc_pause();
- PerlProc_gettimeofday(&Tb,NULL);
+ gettimeofday(&Tb, NULL);
#if 0
printf("[%ld %ld] [%ld %ld]\n", Tb.tv_sec, Tb.tv_usec, Ta.tv_sec, Ta.tv_usec);
#endif
PREINIT:
struct timeval Ta, Tb;
CODE:
- PerlProc_gettimeofday(&Ta,NULL);
+ gettimeofday(&Ta, NULL);
if (items > 0) {
NV seconds = SvNV(ST(0));
if (seconds >= 0.0) {
croak("Time::HiRes::sleep(%"NVgf"): negative time not invented yet", seconds);
} else
PerlProc_pause();
- PerlProc_gettimeofday(&Tb,NULL);
+ gettimeofday(&Tb, NULL);
#if 0
printf("[%ld %ld] [%ld %ld]\n", Tb.tv_sec, Tb.tv_usec, Ta.tv_sec, Ta.tv_usec);
#endif
struct timezone Tz;
PPCODE:
int status;
- status = PerlProc_gettimeofday(&Tp,&Tz);
+ status = gettimeofday (&Tp, &Tz);
Tp.tv_sec += Tz.tz_minuteswest * 60; /* adjust for TZ */
if (GIMME == G_ARRAY) {
struct timezone Tz;
CODE:
int status;
- status = PerlProc_gettimeofday(&Tp,&Tz);
+ status = gettimeofday (&Tp, &Tz);
Tp.tv_sec += Tz.tz_minuteswest * 60; /* adjust for TZ */
RETVAL = Tp.tv_sec + (Tp.tv_usec / 1000000.0);
OUTPUT:
struct timeval Tp;
PPCODE:
int status;
- status = PerlProc_gettimeofday(&Tp,NULL);
+ status = gettimeofday (&Tp, NULL);
if (GIMME == G_ARRAY) {
EXTEND(sp, 2);
PUSHs(sv_2mortal(newSViv(Tp.tv_sec)));
struct timeval Tp;
CODE:
int status;
- status = PerlProc_gettimeofday(&Tp,NULL);
+ status = gettimeofday (&Tp, NULL);
RETVAL = Tp.tv_sec + (Tp.tv_usec / 1000000.);
OUTPUT:
RETVAL
struct itimerval oldit;
PPCODE:
if (seconds < 0.0 || interval < 0.0)
- croak("Time::HiRes::setitimer(%"IVdf", %"NVgf", %"NVgf"): negative time not invented yet", which, seconds, interval);
+ croak("Time::HiRes::setitimer(%"IVdf", %"NVgf", %"NVgf"): negative time not invented yet", (IV)which, seconds, interval);
newit.it_value.tv_sec = seconds;
newit.it_value.tv_usec =
(seconds - (NV)newit.it_value.tv_sec) * 1000000.0;