19 Mart 2018 Pazartesi

std::chrono::duration_cast metodu

chrono::duration_cast
duration_cast farklı duration tipleri arasında dönüşüm yapmak için kullanılır.
Örnek
Şöyle yaparız
typedef std::chrono::high_resolution_clock my_clock;

my_clock::time_point start = my_clock::now();

// Do stuff

my_clock::time_point end = my_clock::now();

std::chrono::milliseconds ms_duration = 
    std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
Örnek
Çevrimde kayıp olmasın yani gerekirse küsuratlı olsun istersek float kullanarak şöyle yaparız.
std::chrono::high_resolution_clock::duration d = ...;
if (d < std::chrono::microseconds(10))
cout
<< std::chrono::duration_castt<std::chrono::duration<float, std::nano>>(d).count()
<< " nnano s";
Örnek
std::duration_cast kodları uzun olduğu için şöyle yaparız.
template <typename Duration>
auto as_ms(Duration const& duration) {
    return std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();
}

void foo() {
  Time start = Clock::now();
  // something
  Time end = Clock::now();
  std::cout << as_ms(end - start).count() << std::endl;
}
C++17 ile şöyle yaparız.
using Clock = std::chrono::system_clock;
using Time = Clock::time_point;

auto Ms = [](auto&& duration)
{
  return std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();
};

auto start = Clock::now();
// something
auto end = Clock::now();
std::cout << Ms(end - start) << std::endl;




Hiç yorum yok:

Yorum Gönder