28 Mart 2018 Çarşamba

GetSystemTimeAsFileTime metodu

Giriş 
Açıklaması şöyle.
If you plan to modify file times for specified files, you can convert a date and time of day to a file time by using the SystemTimeToFileTime function. You can also obtain the system time in a FILETIME structure by calling the GetSystemTimeAsFileTime function.

To make a file time easy to display to a user, use the FileTimeToSystemTime function. FileTimeToSystemTime converts the file time and copies the month, day, year, and time of day from the file time to a SYSTEMTIME structure.
Hassasiyeti (precision) 100 nano saniye cinsinden. Windows'un doğruluğu (accuracy) 1562 mikrosaniye yani 1.5 milisaniye civarında.

Metod Windows Epoch'undan beri geçen 100 nano-saniyelik aralık sayısını alabilmemizi sağlar. Bu metod aslında sadece global bir değişkeni okur, donanım seviyesindeki bir register'ı okumadığı için hızlıdır.

Örnek
Şöyle yaparız. 100 nano saniyelik sayaç, milisaniyeye çevrilirken 10000 (on bin) ile bölünür.
FILETIME filetime,filetime2;
GetSystemTimeAsFileTime(&filetime);
Sleep(100);
GetSystemTimeAsFileTime(&filetime2);
ULONGLONG time1,time2;
time1 = (((ULONGLONG) filetime.dwHighDateTime) << 32) + filetime.dwLowDateTime;
time2 = (((ULONGLONG) filetime2.dwHighDateTime) << 32) + filetime2.dwLowDateTime;
printf("ELAPSED TIME IN MS:%d",(int)((time2-time1)/10000));
Windows Epoch'u POSIX Epoch'une çevirmek için şöyle yaparız. 100 nano saniyelik sayaç, mikrosaniyeye çevrilirken 10 ile bölünür.Eğer sonucu nanosaniye olarak isteseydik tt sayısını 100 ile çarpmak gerekirdi.
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
unsigned long long tt = ft.dwHighDateTime;
tt <<=32;
tt |= ft.dwLowDateTime;
tt /=10; //convert to microseconds
tt -= 11644473600000000ULL;//Adjust for POSIX epoch

Hiç yorum yok:

Yorum Gönder