Advertisement
DarthGizka

Test program for zw_GetSystemTimeAsFileTime

Nov 15th, 2015
407
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.50 KB | None | 0 0
  1. // http://codereview.stackexchange.com/questions/110819/delphi-convenience-wrapper-for-getsystemtimepreciseasfiletime
  2.  
  3. program dev_GSTAFT_D7;
  4.  
  5. {$APPTYPE CONSOLE}
  6.  
  7. uses
  8.   SysUtils,
  9.   Windows,
  10.   UTestGSTAFT_v1 in 'UTestGSTAFT_v1.pas';
  11.  
  12. function GSTAFT_resolution (iteration_count_ptr: PInteger = nil): Int64;
  13. var
  14.    ft0, ft1, ft2: Int64;
  15.    i: Integer;
  16. begin
  17.    i := 0;
  18.    GetSystemTimeAsFileTime(TFileTime(ft0));
  19.    repeat
  20.       GetSystemTimeAsFileTime(TFileTime(ft1));
  21.    until ft1 <> ft0;
  22.    repeat
  23.       GetSystemTimeAsFileTime(TFileTime(ft2));
  24.       Inc(i);
  25.       result := ft2 - ft1;
  26.    until result <> 0;
  27.    if iteration_count_ptr <> nil then
  28.       iteration_count_ptr^ := i;
  29. end;
  30.  
  31. function zw_GSTAFT_resolution (iteration_count_ptr: PInteger = nil): Int64;
  32. var
  33.    ft0, ft1, ft2: Int64;
  34.    i: Integer;
  35. begin
  36.    i := 0;
  37.    zw_GetSystemTimeAsFileTime(TFileTime(ft0));
  38.    repeat
  39.       zw_GetSystemTimeAsFileTime(TFileTime(ft1));
  40.    until ft1 <> ft0;
  41.    repeat
  42.       zw_GetSystemTimeAsFileTime(TFileTime(ft2));
  43.       Inc(i);
  44.       result := ft2 - ft1;
  45.    until result <> 0;
  46.    if iteration_count_ptr <> nil then
  47.       iteration_count_ptr^ := i;
  48. end;
  49.  
  50. type
  51.    TMeasurementFunc = function (iteration_count_ptr: PInteger): Int64;
  52.  
  53. procedure print_measurements (f: TMeasurementFunc; rounds: Integer = 4);
  54. var
  55.    i, iterations: Integer;
  56.    delta: Int64;
  57. begin
  58.    Write(IntToHex(LongInt(@f),1), ':');
  59.    for i := 1 to rounds do begin
  60.       delta := f(@iterations);
  61.       Write('  ', delta, ' (', iterations, ')');
  62.    end;
  63.    WriteLn;
  64. end;
  65.  
  66. // D7/32 under WinXP/32:
  67. //    4084DC:  100144 (3109338)  100144 (3092557)  100144 (3142066)  100144 (3157937)
  68. //    408544:  100144 (3014201)  100144 (3039902)  100144 (3081043)  100144 (3043956)
  69. // D7/32 under Win81/64:
  70. //    4084DC:  10000 (279981)  10003 (285789)  10004 (266131)  10004 (232320)
  71. //    408544:  3 (15)  3 (15)  3 (10)  3 (14)
  72. //
  73. // RX/32 under WinXP/32
  74. //    419CD0:  100144 (3183747)  100144 (2961456)  100144 (3176890)  100144 (3106160)
  75. //    419D38:  100144 (3052794)  100144 (3059331)  100144 (3057960)  100144 (2980830)
  76. // RX/32 under Win81/64
  77. //    419CD0:  9966 (271333)  10004 (277470)  10004 (248138)  10004 (270506)
  78. //    419D38:  4 (14)  3 (15)  4 (15)  3 (12)
  79. // RX/64 under Win81/64
  80. //    426300:  10007 (176924)  10004 (180450)  10004 (175266)  10078 (135203)
  81. //    426360:  3 (24)  3 (24)  3 (23)  3 (24)
  82.  
  83. begin
  84.    print_measurements(GSTAFT_resolution);
  85.    print_measurements(zw_GSTAFT_resolution);
  86. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement