The code for evutil_gettimeofday() on Windows is: /* Conversion logic taken from Tor, which in turn took it * from Perl. GetSystemTimeAsFileTime returns its value as * an unaligned (!) 64-bit value containing the number of * 100-nanosecond intervals since 1 January 1601 UTC. */ #define EPOCH_BIAS U64_LITERAL(116444736000000000) #define UNITS_PER_SEC U64_LITERAL(10000000) #define USEC_PER_SEC U64_LITERAL(1000000) #define UNITS_PER_USEC U64_LITERAL(10) union { FILETIME ft_ft; ev_uint64_t ft_64; } ft;
if (tv == NULL) return -1; GetSystemTimeAsFileTime(&ft.ft_ft); if (EVUTIL_UNLIKELY(ft.ft_64 < EPOCH_BIAS)) { /* Time before the unix epoch. */ return -1; } ft.ft_64 -= EPOCH_BIAS; tv->tv_sec = (long) (ft.ft_64 / UNITS_PER_SEC); tv->tv_usec = (long) ((ft.ft_64 / UNITS_PER_USEC) % USEC_PER_SEC); return 0; Note it ends with three 64-bit divisions. Given the routine can be (though shouldn't be) a hot path, a micro-optimization seems worth considering: ft.ft_64 -= EPOCH_BIAS; tv->tv_sec = (long) (ft.ft_64 / UNITS_PER_SEC); tv->tv_usec = (long) ((ft.ft_64 - (UNITS_PER_SEC * tv->tv_sec)) / UNITS_PER_USEC); That substitutes a multiplication followed by subtraction in place of the modulo 1 million. While I haven't tested it, I believe mul + sub will be faster than modulo (division). I'm not actually using libevent on Windows at this point. Cheers, Dave Hart *********************************************************************** To unsubscribe, send an e-mail to majord...@freehaven.net with unsubscribe libevent-users in the body.