DosTmrQueryTime

From EDM2
Jump to: navigation, search

Provides a snapshot of the time from the IRQ0 high resolution timer (Intel 8254). Queries the performance timer for a time value.

Syntax

DosTmrQueryTime(pqwTmrTime);

Parameters

pqwTmrTime (PQWORD) - output 
Time.

A snapshot of the time from the IRQ0 high resolution timer.

It is a pointer, supplied by the calling application, to the following structure:

typedef struct _QWORD { 
         ULONG ulLo,
         ULONG ulHi,
     } QWORD;
typedef QWORD *PQWORD;

Return Code

rc (APIRET) - returns

DosTmrQueryTime returns the following values:

  • 0 NO_ERROR
  • 87 ERROR_INVALID_PARAMETER
  • 53 ERROR_TMR_NO_DEVICE
  • 99 ERROR_DEVICE_IN_USE
  • 536 ERROR_TMR_INVALID_TIME

Example Source Code

Use Example:

 /*
  * Description: Display high resolution system time.
  */
 
 #define INCL_DOS
 #define INCL_DOSERRORS
 
 #include <os2.h>
 #include <stdio.h>
 
 VOID main() { 
    QWORD qwTime;
    ULONG rc;

    if ((rc = DosTmrQueryTime(&qwTime)) != NO_ERROR)
          printf("\nERROR (DosTmrQueryTime): %d\n", rc);
       else 
          printf("Time = 0x %08lx %08lx\n", qwTime.ulHi, qwTime.ulLo);
 }

Remarks

This API will fill the QWORD structure, supplied by the caller, with the 64-bit timer value such that :

  • pqwTime->ulHi = The most significant 32-bits of the timer value.
  • pqwTime->ulLo = The least significant 32-bits of the timer value.

The performance timer is a free running counter; it is initialized to 0 at boot time and thereafter increments. When it reaches its maximum value of (2¬64 - 1), it rolls over to 0 and continues incrementing. A process can time an event by subtracting the value of the timer at the start of the event from the value of the timer at the end of the event. Currently, ulTimerFreq = 1.19318 Mhz, for a timer resolution of about .838 microseconds. (See also DosTmrQueryFreq.)

Related Functions