C++11 chrono
Chrono içinde saat, süre, zaman noktası gibi kavramlar kullanılmış. Chrono için koda şu include eklenir.
chrono duration yazısına taşıdım.
2. Zaman Noktası - Time Point
Zaman noktaları saatin tipinden tanımlanır. Saatin epoch içindir. Süre ise epoch'tan beri geçen tick sayısı içindir.Chrono içinde saat, süre, zaman noktası gibi kavramlar kullanılmış. Chrono için koda şu include eklenir.
#include <chrono>
1. Süre - Durationchrono duration yazısına taşıdım.
2. Zaman Noktası - Time Point
A timepoint is defined as combination of a duration and a beginning of time (the so-calledepoch).
In other words, timepoint is defined as a duration before or after an epoch, which is defined by a clock
chrono::high_resolution_clock::time_point sınıfı
zaman değerini saklar
typedef std::chrono::high_resolution_clock my_clock;
my_clock::time_point start = my_clock::now();
3. Saatler
3 tane temel saat var. Bunlar high_resolution_clock, system_clock ve steady clock. Saatin sunduğu en önemli metod now(). Bunun dışında pek te önemli bir şey sunmuyor.
3.1 chrono::system_clock sınıfı
chrono::system_clock sınıfı yazısına taşıdım.
3.2 chrono::high_resolution_clock sınıfı
Sınıfın tanımında "represents the clock with the smallest tick period provided by the implementation" yazıyor.
high_resolution_clock sistemdeki en hassas saate alias olarak tanımlanır. En hassas saat system_clock veya steady_clock olabilir. En hassas saat system_clock ise durum vahimdir :)
VS2012'de high_resolution_clock system_clock ile aynı. Hatta sadece typdef olarak tanımlı.
Windows'ta en küçük çözünürlük 100 nanosaniye. Ancak çoğunlukla 100 nanosaniyede bir güncellenmiyor.
cout << "resolution (nano) = " << (double) high_resolution_clock::period::num
/ high_resolution_clock::period::den * 1000 * 1000 * 1000 << endl;
Burada high_resolution_clock::period::den her saniyedeki tick sayısını verir. Her tick'in arasını saniye olarak bulup 1 milyar ile çarparak nanosaniyeye çeviriyoruz. Çıktı olarak şunu alırız.now metoduresolution (nano) = 100
Bir time_point döndürür.
typedef std::chrono::high_resolution_clock my_clock;
my_clock::time_point start = my_clock::now();
3.3 chrono::steady_clock sınıfı
std::chrono::steady_clock Sınıfı yazısına taşıdım.
Hepsini Kullanmak
ScopedTimer örneğistd::chrono::steady_clock Sınıfı yazısına taşıdım.
Hepsini Kullanmak
#include <chrono>
#include <iostream>
using std::cout;
using std::chrono::high_resolution_clock;
using std::chrono::milliseconds;
using std::endl;
class ScopedTimer {
public:
ScopedTimer(const string& name)
: name_(name), start_time_(high_resolution_clock::now()) {}
~ScopedTimer() {
cout << name_ << " took "
<< std::chrono::duration_cast<milliseconds>(
high_resolution_clock::now() - start_time_).count()
<< " milliseconds" << endl;
}
private:
const string name_;
const high_resolution_clock::time_point start_time_;
};
Hiç yorum yok:
Yorum Gönder