@@ -2252,12 +2252,21 @@ void Eidos_GetUserSysTime(double *p_user_time, double *p_sys_time)
22522252 user_time = rusage.ru_utime .tv_sec + rusage.ru_utime .tv_usec / 1000000.0 ;
22532253 sys_time = rusage.ru_stime .tv_sec + rusage.ru_stime .tv_usec / 1000000.0 ;
22542254#elif defined(_WIN32)
2255- /* Windows might be the same? Let's find out! -------------- */
2256- struct rusage rusage ;
2257- getrusage ( RUSAGE_SELF , &rusage );
2255+ /* Windows does not have getrusage() ---------- -------------- */
2256+ FILETIME creation_time, exit_time, kernel_time, user_time ;
2257+ GetProcessTimes ( GetCurrentProcess (), &creation_time , &exit_time, &kernel_time, &user_time );
22582258
2259- user_time = rusage.ru_utime .tv_sec + rusage.ru_utime .tv_usec / 1000000.0 ;
2260- sys_time = rusage.ru_stime .tv_sec + rusage.ru_stime .tv_usec / 1000000.0 ;
2259+ // Windows programming is weird. Thanks to https://stackoverflow.com/a/12845669/2752221.
2260+ ULARGE_INTEGER kernel_ularge;
2261+ ULARGE_INTEGER user_ularge;
2262+
2263+ kernel_ularge.LowPart = kernel_time.dwLowDateTime ;
2264+ kernel_ularge.HighPart = kernel_time.dwHighDateTime ;
2265+ user_ularge.LowPart = user_time.dwLowDateTime ;
2266+ user_ularge.HighPart = user_time.dwHighDateTime ;
2267+
2268+ user_time = user_ularge / 10000000.0 ;
2269+ sys_time = kernel_ularge / 10000000.0 ;
22612270#else
22622271 /* Unknown OS ----------------------------------------------- */
22632272 user_time = 0.0 ; /* Unsupported. */
0 commit comments