Skip to content

Commit c6bc1df

Browse files
committed
try a fix for Windows time usage
1 parent 43ed001 commit c6bc1df

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

eidos/eidos_globals.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)