W swoim projekcie korzystam z funkcji z Windows API do precyzyjnego odmierzania czasu. Mowa o dwóch funkcjach: QueryPerformanceFrequency i QueryPerformanceCounter. Wartości zwracane przez te funkcje przechowuję w zmiennych typu Int64
.
Tuż po uruchomieniu programu, pobieram i zapamiętuję rozdzielczość sprzętowego countera, za pomocą QueryPerformanceFrequency
. W trakcie działania programu, wielokrotnie pobieram bieżący stan licznika – za pomocą funkcji QueryPerformanceCounter
– i na podstawie tych wartości odmierzać czas. Funkcja ta za każdym razem zwraca liczbę większą w stosunku do poprzedniego wywołania (ciąg rosnący, a przynajmniej niemalejący) i na tym mi zależy.
Kod projektu chciałbym teraz przystosować do Uniksów (różne Linuksy i macOS). Dużo poczytałem na ten temat, znalazłem nawet odpowiedniki dla wymienionych funkcji – odpowiednio clock_getres i clock_gettime. Znalazłem też przykłady użycia tych funkcji – wykorzystywane są w module timestamps.helpers.pas. Problem w tym, że nie za bardzo wiem jak to u siebie wykorzystać…
Nie rozumiem co konkretnie zawierają pola struktury typu timespec
, jak wartości tych pól poprawnie przerobić na jedną liczbę typu Int64
, których stałych użyć w wywołaniach tych funkcji, jak to poprzeliczać itd.
Pomógłby ktoś z tym? Byłbym wdzięczny.