#include <windows.h>

#define FILETIME_UNITS_PER_SEC  10000000L
#define FILETIME_UNITS_PER_USEC 10

void main(int argc, char *argv[]) {
    FILETIME ft1, ft2;
    ULARGE_INTEGER uli1, uli2;
	int r = 0;
	
	int n = (argc > 1) ? atol(argv[1]) : 0;

    GetSystemTimePreciseAsFileTime(&ft1);
	for (long int i = 0; i < n; i++) r += i;
    GetSystemTimePreciseAsFileTime(&ft2);

    uli1.LowPart = ft1.dwLowDateTime; uli1.HighPart = ft1.dwHighDateTime;

    long usec1 = (long) (((uli1.QuadPart) % FILETIME_UNITS_PER_SEC)
                          / FILETIME_UNITS_PER_USEC);

    uli2.LowPart = ft2.dwLowDateTime; uli2.HighPart = ft2.dwHighDateTime;

    long usec2 = (long) (((uli2.QuadPart) % FILETIME_UNITS_PER_SEC)
                          / FILETIME_UNITS_PER_USEC);

	printf("usec1: %llu, usec2: %llu, usec2 - usec1: %d, uli2 - uli1: %ld, r: %d\n", usec1, usec2, usec2 - usec1, (long)(uli2.QuadPart - uli1.QuadPart), r);
}