Windows.PrecisionTimer.Mod 977 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. (**
  2. AUTHOR: Alexey Morozov
  3. PURPOSE: high precision timer support for Windows platforms
  4. *)
  5. MODULE PrecisionTimer;
  6. IMPORT
  7. SYSTEM, Kernel32, KernelLog;
  8. TYPE
  9. Counter* = HUGEINT;
  10. CONST
  11. (**
  12. Query timer counter in ticks
  13. *)
  14. PROCEDURE GetCounter*(): Counter;
  15. VAR counter: Counter;
  16. BEGIN
  17. IF Kernel32.QueryPerformanceCounter(SYSTEM.VAL(Kernel32.LargeInteger,counter)) # 0 THEN
  18. RETURN counter;
  19. ELSE
  20. RETURN 0;
  21. END;
  22. END GetCounter;
  23. (**
  24. Query timer tick frequency in Hz
  25. *)
  26. PROCEDURE GetFrequency*(): Counter;
  27. VAR frequencyInHz: Counter;
  28. BEGIN
  29. IF Kernel32.QueryPerformanceFrequency(SYSTEM.VAL(Kernel32.LargeInteger,frequencyInHz)) # 0 THEN
  30. RETURN frequencyInHz;
  31. ELSE
  32. RETURN 0;
  33. END;
  34. END GetFrequency;
  35. PROCEDURE InitMod;
  36. BEGIN
  37. KernelLog.String("PrecisionTimer: timer tick frequency is "); KernelLog.Int(GetFrequency(),0); KernelLog.String(" Hz"); KernelLog.Ln;
  38. END InitMod;
  39. BEGIN
  40. InitMod;
  41. END PrecisionTimer.
  42. System.Free PrecisionTimer ~