+{$ifdef linux}\r
+ {$define monotimefloat_implemented}\r
+ const\r
+ CLOCK_MONOTONIC = 1;\r
+ type \r
+ ptimeval = ^ttimeval;\r
+ tclock_gettime = function(clk_id: integer; tp: ptimeval): integer; cdecl;\r
+\r
+ var\r
+ librt_handle:pointer;\r
+ librt_inited:boolean;\r
+ clock_gettime: tclock_gettime;\r
+\r
+ function monotimefloat:float;\r
+ var\r
+ ts: ttimeval;\r
+ begin\r
+ if not librt_inited then begin\r
+ librt_inited := true;\r
+ clock_gettime := nil;\r
+ librt_handle := dlopen('librt.so', RTLD_LAZY);\r
+ if assigned(librt_handle) then begin\r
+ clock_gettime := dlsym(librt_handle, 'clock_gettime');\r
+ end;\r
+ end;\r
+ if assigned(clock_gettime) then begin\r
+ if clock_gettime(CLOCK_MONOTONIC, @ts) = 0 then begin\r
+ //note this really returns nanoseconds\r
+ result := ts.tv_sec + ts.tv_usec / 1000000000.0;\r
+ exit;\r
+ end;\r
+ end;\r
+ //fallback\r
+ result := unixtimefloat;\r
+ end;\r