Giriş
Şu satırı dahil ederiz.
Şu satırı dahil ederiz.
#include <windows.h>
Açıklaması şöyle. Sistem saatinden bağımsızdır. Java'daki System.nano() ile aynıdır.
Açıklaması şöyle. TSC kısaltması Time Stamp Counter anlamına gelir. 64 bitlik bir register olarak düşünülebilir. HPET kısaltması High Precision Event Timer anlamına gelir.
Windows 8When you need time stamps with a resolution of 1 microsecond or better and you don't need the time stamps to be synchronized to an external time reference, choose QueryPerformanceCounter.
Açıklaması şöyle. TSC kısaltması Time Stamp Counter anlamına gelir. 64 bitlik bir register olarak düşünülebilir. HPET kısaltması High Precision Event Timer anlamına gelir.
QueryPerformanceCounter was always based on a TSC (as oppose to Windows 7, where it could be a TSC, HPET or the ACPI PM timer - the latter of which is especially rather inaccurate.)Örnek - Saniye Süre Ölçme
Şöyle yaparız
LARGE_INTEGER frequency;QueryPerformanceFrequency(&frequency);LARGE_INTEGER start;LARGE_INTEGER end;QueryPerformanceCounter(&start);...QueryPerformanceCounter(end);double interval = (double) (end.QuadPart - start.QuadPart) / (frequency.QuadPart / 1000);printf("%f ms\n", interval)
Örnek - Mikro saniye Süre Ölçme
Şöyle yaparız
long long unsigned int GetCurrentTimestamp()
{
LARGE_INTEGER res;
QueryPerformanceCounter(&res);
return res.QuadPart;
}
long long unsigned int initalizeFrequency()
{
LARGE_INTEGER res;
QueryPerformanceFrequency(&res);
return res.QuadPart;
}
//start time stamp
long long unsigned int start = GetCurrentTimestamp();
// ....
// execution that should be measured
// ....
std::cout << "Processing time is " << ((end - start) * 1000000 / initalizeFrequency())
<< " microsec "<< std::endl;
Sonuç olarak şunu alırız
Processing time is 24 microsec
Şöyle yaparız.
SystemTime getSystemTime()
{
LARGE_INTEGER t;
if (!QueryPerformanceCounter(&t)) {
return static_cast<SystemTime>(-1);
}
return static_cast<SystemTime>(t.QuadPart);
}
Örnek
Java kodu şöyle.
LARGE_INTEGER current_count;
QueryPerformanceCounter(¤t_count);
double current = as_long(current_count);
double freq = performance_frequency;
jlong time = (jlong)((current/freq) * NANOSECS_PER_SEC);
return time;
Hiç yorum yok:
Yorum Gönder