1 #define WIN32_LEAN_AND_MEAN
10 static DWORD_PTR
hog (DWORD_PTR count
)
13 while (i
< count
&& !stop
) ++i
;
17 static void CALLBACK
timer_callback (
33 static UINT
settimer (DWORD_PTR val
)
37 mr
= timeSetEvent (1, 0, timer_callback
, val
,
38 TIME_PERIODIC
| TIME_CALLBACK_FUNCTION
);
40 fprintf (stderr
, "timeSetEvent failed: %ld\n", GetLastError ());
46 int main (int argc
, char **argv
)
52 DWORD_PTR est
[NITERS
];
57 mask
= atoi (argv
[1]);
61 prevmask
= SetProcessAffinityMask (GetCurrentProcess (), mask
);
63 fprintf (stderr
, "SetProcessAffinityMask failed: %ld\n", GetLastError ());
68 for (i
= 0; i
< NITERS
; ++i
) {
70 est
[i
] = hog ((DWORD_PTR
) 0 - 1);
73 mr
= timeKillEvent (id
);
74 if (mr
!= TIMERR_NOERROR
) {
75 fprintf (stderr
, "timeKillEvent failed: %ld\n", GetLastError ());
82 for (i
= 0; i
< NITERS
; ++i
) {
83 if (est
[i
] < est
[mini
]) mini
= i
;
84 if (est
[i
] > est
[maxi
]) maxi
= i
;
88 for (i
= 0; i
< NITERS
; ++i
) {
89 fprintf (stderr
, "%f\n", (double) est
[i
]);
90 if (i
== mini
|| i
== maxi
) continue;
95 fprintf (stderr
, "%f\n", d
);