Giriş
Bu sınıf basit bir sayaçtan ibaret. Ancak sayacın çözünürlüğü bize açık değil. Örneğin Windows'ta Time Tick sayar. Time Tick 100 nano saniyede bir artar.
Alanlar
clock Alanı- Hangi saatin bu time_point nesnesini ürettiğini belirtir.
Örnek
Şöyle yaparız. Her clock nesnesin kendi ürettiği bir time_point'i std::time_t'ye (yani epoch'tan beri geçen süreye) çevirebilir.
rep Alanı- duration içinde kaç tane tick olduğunu belirtir.
period Alanı- Bir tick'in std::period olarak süresini belirtir.
tanımlama
Şöyle yapabiliriz.
Örnek ver
max metodu
Şöyle yaparız.
Örnek ver
operator -= metodu
Örnek ver
time_since_epoch metodu
Bu metod ile time_point nesnesi duration nenesine çevrilir. Böylece count() metodu ile içindeki değere erişebiliriz.
Örnek 1
Şöyle yaparız.
Bu sınıf basit bir sayaçtan ibaret. Ancak sayacın çözünürlüğü bize açık değil. Örneğin Windows'ta Time Tick sayar. Time Tick 100 nano saniyede bir artar.
Alanlar
clock Alanı- Hangi saatin bu time_point nesnesini ürettiğini belirtir.
Örnek
Şöyle yaparız. Her clock nesnesin kendi ürettiği bir time_point'i std::time_t'ye (yani epoch'tan beri geçen süreye) çevirebilir.
#include <chrono>
#include <filesystem>
#include <iomanip>
#include <iostream>
#include <sstream>
namespace fs = std::filesystem;
int main() {
fs::file_time_type file_time = fs::last_write_time(__FILE__);
std::time_t tt = decltype(file_time)::clock::to_time_t(file_time);
std::tm *gmt = std::gmtime(&tt);
std::stringstream buffer;
buffer << std::put_time(gmt, "%A, %d %B %Y %H:%M");
std::string formattedFileTime = buffer.str();
std::cout << formattedFileTime << '\n';
}
duration Alanı - time_point nesnesinin epoch'tan beri geçen zamanı hangi tip ile sakladığını belirtir. duration nanosaniye, milisaniye olabilir.rep Alanı- duration içinde kaç tane tick olduğunu belirtir.
period Alanı- Bir tick'in std::period olarak süresini belirtir.
tanımlama
Şöyle yapabiliriz.
system_clock::time_point time_point = system_clock::now();// no time_point_cast
Ama en kolayı auto ile kullanmak.auto time_point = system_clock::now();
constructor metoduÖrnek ver
max metodu
Şöyle yaparız.
std::chrono::time_point<std::chrono::system_clock>::max();
min metodu
Şöyle yaparız.std::chrono::time_point<std::chrono::system_clock>::min();
operator += metoduÖrnek ver
operator -= metodu
Örnek ver
Bu metod ile time_point nesnesi duration nenesine çevrilir. Böylece count() metodu ile içindeki değere erişebiliriz.
Örnek 1
Şöyle yaparız.
auto now = chrono::system_clock::now();
cout << "now: " << time_point_cast<seconds>(now).time_since_epoch().count();
Çıktı olarak şöyle bir sayı alırız.now: 2800906746162
Örnek 2
Şöyle yaparız.
Diğer
time_point_cast metodu
time_point'i belirtilen çözünürlükteki bir başka time_point'e çevirir. Saatin çözünülürlüğü bilinmediği için, time_point'in içindeki sayı bize bir anlam ifade etmez. Bu sayı istediğimiz birime çevrilmelidir.
Örnek - Gün
Şöyle yaparız.
Saatin verdiği time_point nesnesini saniyeye çevirmek için şöyle yaparız.
Milisaniye için şöyle yaparız.
Şöyle yaparız.
using namespace std::chrono;
milliseconds ms = duration_cast< milliseconds >(
system_clock::now().time_since_epoch()
);
time_point_cast metodu
time_point'i belirtilen çözünürlükteki bir başka time_point'e çevirir. Saatin çözünülürlüğü bilinmediği için, time_point'in içindeki sayı bize bir anlam ifade etmez. Bu sayı istediğimiz birime çevrilmelidir.
Örnek - Gün
Şöyle yaparız.
using days = duration<int, ratio<86400>>;
nanoseconds last_midnight =
time_point_cast<days>(system_clock::now()).time_since_epoch();
cout << last_midnight.count();
Örnek - SaniyeSaatin verdiği time_point nesnesini saniyeye çevirmek için şöyle yaparız.
typedef std::chrono::system_clock Clock;
auto now = Clock::now();
auto seconds = std::chrono::time_point_cast<std::chrono::seconds>(now);
Küsuratlı saniye için şöyle yaparız.using clock = std::chrono::system_clock;
using dsec = std::chrono::duration<double>;
using tps = std::chrono::time_point<clock, dsec>;
tps tp = clock::now();
Örnek - MilisaniyeMilisaniye için şöyle yaparız.
auto now_ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now);
Hiç yorum yok:
Yorum Gönder