Advertisement
DarthGizka

experimental unit for zw_GetSystemTimeAsFileTime

Nov 15th, 2015
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.21 KB | None | 0 0
  1. // http://codereview.stackexchange.com/questions/110819/delphi-convenience-wrapper-for-getsystemtimepreciseasfiletime
  2.  
  3. unit UTestGSTAFT_v1;
  4.  
  5. interface
  6.  
  7. uses
  8.    {$ifdef VER150} Windows {$else} WinAPI.Windows {$endif};
  9.  
  10. procedure zw_GetSystemTimeAsFileTime (var ft: TFileTime);  stdcall;
  11.  
  12. implementation
  13.  
  14. procedure GSTAFT_AutoInit_ (var ft: TFileTime); stdcall; forward;
  15.  
  16. type
  17.    TGetSystemTimeAsFileTime = procedure (var ft: TFileTime); stdcall;
  18.  
  19. var
  20.    GetSystemTimeAsFileTime_: TGetSystemTimeAsFileTime = GSTAFT_AutoInit_;
  21.  
  22. procedure zw_GetSystemTimeAsFileTime (var ft: TFileTime);  stdcall;
  23. begin
  24.    GetSystemTimeAsFileTime_(ft);
  25. end;
  26.  
  27. {$ifdef VER150}
  28. function InterlockedCompareExchangePointer (var dst: Pointer; new_val, cmp_val: Pointer): Pointer;
  29. stdcall; external kernel32 name 'InterlockedCompareExchange';
  30. {$endif}
  31.  
  32. procedure GSTAFT_AutoInit_ (var ft: TFileTime); stdcall;
  33. var
  34.    fp: TFarProc;
  35. begin
  36.    fp := GetProcAddress(GetModuleHandle('kernel32'), 'GetSystemTimePreciseAsFileTime');
  37.    if fp = nil then
  38.       fp := @GetSystemTimeAsFileTime;
  39.    InterlockedCompareExchangePointer(Pointer(@GetSystemTimeAsFileTime_), fp, @GSTAFT_AutoInit_);
  40.    GetSystemTimeAsFileTime_(ft);
  41. end;
  42.  
  43. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement