home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 October / PCO1097.ISO / FilesBBS / OS2 / DISKIO11.ARJ / DISKIO11.ZIP / dhry_os2.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-31  |  1.4 KB  |  81 lines

  1. /* dhry_os2.c
  2.  *
  3.  * Author:  Kai Uwe Rommel <rommel@ars.de>
  4.  * Created: Thu Dec 21 1995
  5.  */
  6.  
  7. static char *rcsid =
  8. "$Id$";
  9. static char *rcsrev = "$Revision$";
  10.  
  11. /*
  12.  * $Log$ 
  13.  */
  14.  
  15. #define INCL_DOS
  16. #define INCL_DOSDEVICES
  17. #define INCL_DOSDEVIOCTL
  18. #define INCL_DOSERRORS
  19. #define INCL_NOPM
  20. #include <os2.h>
  21.  
  22. #include <stdio.h>
  23.  
  24. extern unsigned long Number_Of_Runs;
  25.  
  26. VOID APIENTRY timer_thread(ULONG nArg)
  27. {
  28.   HEV hSem;
  29.   HTIMER hTimer;
  30.  
  31.   DosCreateEventSem(0, &hSem, DC_SEM_SHARED, 0);
  32.   DosAsyncTimer(nArg, (HSEM) hSem, &hTimer);
  33.   DosWaitEventSem(hSem, SEM_INDEFINITE_WAIT);
  34.   DosStopTimer(hTimer);
  35.   DosCloseEventSem(hSem);
  36.  
  37.   Number_Of_Runs = 0;
  38.  
  39.   DosExit(EXIT_THREAD, 0);
  40. }
  41.  
  42. ULONG start_alarm(LONG nSeconds)
  43. {
  44.   TID tid;
  45.  
  46.   Number_Of_Runs = -1;
  47.  
  48.   return DosCreateThread(&tid, timer_thread, nSeconds * 1000, 0, 8192);
  49. }
  50.  
  51. ULONG start_timer(QWORD *nStart)
  52. {
  53.   if (DosTmrQueryTime(nStart))
  54.     return printf("Timer error.\n"), -1;
  55.  
  56.   return 0;
  57. }
  58.  
  59. ULONG stop_timer(QWORD *nStart, int accuracy)
  60. {
  61.   ULONG nFreq;
  62.   QWORD nStop;
  63.  
  64.   if (DosTmrQueryTime(&nStop))
  65.     return printf("Timer error.\n"), -1;
  66.   if (DosTmrQueryFreq(&nFreq))
  67.     return printf("Timer error.\n"), -1;
  68.  
  69.   nFreq = (nFreq + accuracy / 2) / accuracy;
  70.  
  71.   return (nStop.ulLo - nStart->ulLo) / nFreq;
  72. }
  73.  
  74. void main(int argc, char **argv)
  75. {
  76.   extern void dhry_main(int argc, char **argv);
  77.   dhry_main(argc, argv);
  78. }
  79.  
  80. /* end of dhry_os2.c */
  81.