Actual source code: nt_time.c
1: /*$Id: nt_time.c,v 1.25 2001/04/05 21:06:51 balay Exp $*/
3: #include <petsc.h>
4: #if defined (PARCH_win32_gnu) || defined (PARCH_win32)
5: #include <Windows.h>
6: #define FACTOR 4294967296.0 /* pow(2,32) */
10: PetscLogDouble nt_time(void)
11: {
12: static PetscTruth flag = PETSC_TRUE;
13: int ierr;
15: static LARGE_INTEGER StartTime,PerfFreq,CurTime;
16: static PetscLogDouble SecInTick=0.0;
17:
18: DWORD dwStartHigh,dwCurHigh;
19: PetscLogDouble dTime,dHigh;
20: PetscLogDouble ptime;
21:
22:
24: if (flag) {
25: QueryPerformanceCounter(&StartTime);CHKERRQ(!ierr);
26: QueryPerformanceFrequency(&PerfFreq);CHKERRQ(!ierr);
27: /* Explicitly convert the higher 32 bits, and add the lower 32 bits from the counter */
28: /* works on non-pentium CPUs ? */
29: SecInTick = 1.0/((double)PerfFreq.HighPart*FACTOR+(double)PerfFreq.LowPart);
30: flag = PETSC_FALSE;
31: }
32:
33: QueryPerformanceCounter(&CurTime);CHKERRQ(!ierr);
34: dwCurHigh = (DWORD)CurTime.HighPart;
35: dwStartHigh = (DWORD)StartTime.HighPart;
36: dHigh = (signed)(dwCurHigh - dwStartHigh);
38: dTime = dHigh*(double)FACTOR + (double)CurTime.LowPart - (double)StartTime.LowPart;
39: /* Use the following with older versions of the Borland compiler
40: dTime = dHigh*(double)FACTOR + (double)CurTime.u.LowPart - (double)StartTime.u.LowPart;
41: */
42: ptime = (double)SecInTick*dTime;
44: PetscFunctionReturn(ptime);
45: }
46: #endif