{"id":2240,"date":"2021-08-16T20:30:16","date_gmt":"2021-08-16T20:30:16","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=2240"},"modified":"2021-08-16T20:30:46","modified_gmt":"2021-08-16T20:30:46","slug":"haftalik-c-39-stdchrono-2-clocks-time_point","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/","title":{"rendered":"Haftal\u0131k C++ 40 &#8211; std::chrono &#8211; 2 (clocks, time_point)"},"content":{"rendered":"<p>Evet yaz\u0131l\u0131mperver dostlar\u0131m, std::chrone k\u00fct\u00fcphanesi maceram\u0131za devam ediyoruz. \u0130lk yaz\u0131m\u0131 okumayan yaz\u0131l\u0131mperver dostlar\u0131m\u0131z\u0131n, \u00f6ncelikle o yaz\u0131ma bakmalar\u0131nda fayda var. A\u015fa\u011f\u0131ya ilgili yaz\u0131n\u0131n ba\u011flant\u0131s\u0131n\u0131 ekliyorum:<\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/07\/23\/haftalik-c-39-stdchrono-1\/\">Haftal\u0131k C++ 39 &#8211; std::chrono &#8211; 1<\/a><\/strong><\/span><\/p>\n<p>\u0130lk yaz\u0131m\u0131zda, std::chrono taraf\u0131ndan sunulan \u00fc\u00e7 \u00f6nemli kavram olan,\u00a0s\u00fcre (\u201c<em>duration<\/em>\u201d), saat (\u201c<em>clock<\/em>\u201c) ve zaman noktas\u0131 (\u201c<em>time_point<\/em>\u201c)&#8217;a de\u011finmi\u015f ve s\u00fcre kavram\u0131n\u0131 ve kabiliyetlerini detayl\u0131 bir \u015fekilde incelemi\u015ftik. Bu yaz\u0131m\u0131z\u0131n konusu ise saat ve zaman noktalar\u0131 olacak. O zaman saatler ile ba\u015flayal\u0131m.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">Saatler (&#8220;clock&#8221;)<\/span><\/strong><\/h2>\n<p>std::chrono, saati, bir<strong> ba\u015flang\u0131\u00e7 zaman\u0131<\/strong> (&#8220;epoch&#8221;) ve bu zamandan itibaren olan s\u00fcre i\u00e7in kullan\u0131lacak olan <strong>ilerleme periyot<\/strong> (&#8220;tick period&#8221;) bilgileri ile tan\u0131mlar. Hemen h\u0131zl\u0131 bir \u00f6rnek ile netle\u015ftirmeye \u00e7al\u0131\u015fay\u0131m. \u00d6rne\u011fin, bir saat Unix Epoch&#8217;u (1 Ocak 1970) ba\u015flang\u0131\u00e7 ve periyodu da milisaniye cinsinden ifade ediyor olabilir. Benzer \u015fekilde ba\u015fka saat, saniye cinsinden de tutuyor olabilir. Bunlar farkl\u0131 saatleri temsil eder. Bu saatlerin ba\u015flang\u0131\u00e7 zamanlar\u0131 da farkl\u0131 olabilir.<\/p>\n<p>Peki bu farkl\u0131 saatler konusunda neye dikkat etmemiz gerekiyor? Her ne kadar daha bahsetmemi\u015f olsak da, zaman noktalar\u0131 (&#8220;time point&#8221;) muhakkak bir saat ile ili\u015fkilendirilirler. Farkl\u0131 saatler ile ili\u015fkilendirilmi\u015f, zaman noktalar\u0131n\u0131 bir di\u011feri ile kullanamazs\u0131n\u0131z. \u015eimdi biraz daha detaylara inelim.<\/p>\n<p>std::clock tipleri &lt;chrono&gt; ba\u015fl\u0131k dosyas\u0131 ve std::chrono adres uzay\u0131 i\u00e7erisinde tan\u0131mlanmaktad\u0131r. Uygulamalar\u0131n ihtiya\u00e7lar\u0131na g\u00f6re bir\u00e7ok saat kullan\u0131l\u0131yor olabilir. En son <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\">std::chrono referans sayfas\u0131na<\/a><\/strong><\/span> bakt\u0131\u011f\u0131mda a\u015fa\u011f\u0131daki saatlerin tan\u0131mlanm\u0131\u015f olduklar\u0131n\u0131 g\u00f6rd\u00fcm. Bunlar\u0131n bir k\u0131sm\u0131 C++ 20 ile sunuluyor:<\/p>\n<table class=\"t-dsc-begin\" style=\"height: 484px;\" width=\"856\">\n<tbody>\n<tr class=\"t-dsc\">\n<td>\n<div class=\"t-dsc-member-div\">\n<div><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" title=\"cpp\/chrono\/system clock\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/system_clock\"><span class=\"t-lines\">system_clock<\/span><\/a> <\/strong><\/span><span class=\"t-lines\"><span class=\"t-mark-rev t-since-cxx11\">(C++11)<\/span><\/span><\/div>\n<\/div>\n<\/td>\n<td>Ger\u00e7ek zamanl\u0131 sistem saati s\u0131n\u0131f\u0131<\/td>\n<\/tr>\n<tr class=\"t-dsc\">\n<td>\n<div class=\"t-dsc-member-div\">\n<div><a title=\"cpp\/chrono\/steady clock\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/steady_clock\"><span class=\"t-lines\"><span style=\"color: #008000;\"><strong>steady_clock<\/strong><\/span><\/span><\/a> <span class=\"t-lines\"><span class=\"t-mark-rev t-since-cxx11\">(C++11)<\/span><\/span><\/div>\n<\/div>\n<\/td>\n<td>De\u011fi\u015ftirilemeyen monoton saat s\u0131n\u0131f\u0131<\/td>\n<\/tr>\n<tr class=\"t-dsc\">\n<td>\n<div class=\"t-dsc-member-div\">\n<div><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" title=\"cpp\/chrono\/high resolution clock\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/high_resolution_clock\"><span class=\"t-lines\">high_resolution_clock<\/span><\/a> <\/strong><\/span><span class=\"t-lines\"><span class=\"t-mark-rev t-since-cxx11\">(C++11)<\/span><\/span><\/div>\n<\/div>\n<\/td>\n<td>Sistem taraf\u0131ndan sunulan en k\u0131sa periyoda sahip saat s\u0131n\u0131f\u0131<\/td>\n<\/tr>\n<tr class=\"t-dsc\">\n<td>\n<div class=\"t-dsc-member-div\">\n<div><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" title=\"cpp\/chrono\/utc clock\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/utc_clock\"><span class=\"t-lines\">utc_clock<\/span><\/a> <\/strong><\/span><span class=\"t-lines\"><span class=\"t-mark-rev t-since-cxx20\">(C++20)<\/span><\/span><\/div>\n<\/div>\n<\/td>\n<td>Coordinated Universal Time (UTC) s\u0131n\u0131f\u0131<\/td>\n<\/tr>\n<tr class=\"t-dsc\">\n<td>\n<div class=\"t-dsc-member-div\">\n<div><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" title=\"cpp\/chrono\/tai clock\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/tai_clock\"><span class=\"t-lines\">tai_clock<\/span><\/a> <\/strong><\/span><span class=\"t-lines\"><span class=\"t-mark-rev t-since-cxx20\">(C++20)<\/span><\/span><\/div>\n<\/div>\n<\/td>\n<td>International Atomic Time (TAI) s\u0131n\u0131f\u0131<\/td>\n<\/tr>\n<tr class=\"t-dsc\">\n<td>\n<div class=\"t-dsc-member-div\">\n<div><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" title=\"cpp\/chrono\/gps clock\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/gps_clock\"><span class=\"t-lines\">gps_clock<\/span><\/a> <\/strong><\/span><span class=\"t-lines\"><span class=\"t-mark-rev t-since-cxx20\">(C++20)<\/span><\/span><\/div>\n<\/div>\n<\/td>\n<td>GPS zaman s\u0131n\u0131f\u0131<\/td>\n<\/tr>\n<tr class=\"t-dsc\">\n<td>\n<div class=\"t-dsc-member-div\">\n<div><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" title=\"cpp\/chrono\/file clock\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/file_clock\"><span class=\"t-lines\">file_clock<\/span><\/a> <\/strong><\/span><span class=\"t-lines\"><span class=\"t-mark-rev t-since-cxx20\">(C++20)<\/span><\/span><\/div>\n<\/div>\n<\/td>\n<td>Dosya zaman sn\u0131f\u0131<\/td>\n<\/tr>\n<tr class=\"t-dsc\">\n<td>\n<div class=\"t-dsc-member-div\">\n<div><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" title=\"cpp\/chrono\/local t\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/local_t\"><span class=\"t-lines\">local_t<\/span><\/a><\/strong><\/span> <span class=\"t-lines\"><span class=\"t-mark-rev t-since-cxx20\">(C++20)<\/span><\/span><\/div>\n<\/div>\n<\/td>\n<td>Yerel zaman\u0131 ifade eden &#8220;pseudo-clock&#8221; saat s\u0131n\u0131f\u0131<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Ayr\u0131ca ilgili tipin, saat olup\/olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in C++ 20 ile birlikte<strong><span style=\"color: #008000;\"> <a style=\"color: #008000;\" title=\"cpp\/chrono\/is clock\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/is_clock\"><span class=\"t-lines\">is_clock ve is_clock_v<\/span><\/a><\/span><\/strong> API&#8217;leri de sunulmakta.<\/p>\n<p>Gelelim, bu saatlere ili\u015fkin, her bir saat s\u0131n\u0131f\u0131 ile sunulmas\u0131 gereken tiplere ve statik \u00fcyelere. Bu \u00fcyeler arac\u0131l\u0131\u011f\u0131 ile ilgili saatlere ili\u015fkin daha detayl\u0131 bilgi edinebiliyoruz:<\/p>\n<table>\n<thead>\n<tr>\n<td valign=\"top\"><strong>\u0130lgili \u00dcye<\/strong><\/td>\n<td valign=\"top\"><strong>A\u00e7\u0131klama<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td valign=\"top\"><strong><tt>clock<\/tt><tt>::duration<\/tt><\/strong><\/td>\n<td valign=\"top\">Saat&#8217;in kulland\u0131\u011f\u0131 s\u00fcre (&#8220;duration&#8221;) tipini tan\u0131mlar (<strong>std::chrono::duration&lt;rep, period&gt;<\/strong><span style=\"font-family: monospace;\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><strong><tt>clock<\/tt><tt>::rep<\/tt><\/strong><\/td>\n<td valign=\"top\">Saat&#8217;in kulland\u0131\u011f\u0131 s\u00fcreyi ifade etmek i\u00e7in kulland\u0131\u011f\u0131 ilerlemelerin (&#8220;tick&#8221;) aritmetik tipini ifade eder (std::chrono::duration::rep<span style=\"font-family: monospace;\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><strong><tt>clock<\/tt><tt>::period<\/tt><\/strong><\/td>\n<td valign=\"top\">Saat&#8217;in kulland\u0131\u011f\u0131 periyodun tipini ifade eder (std::chrono::duration::period)<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><strong><tt>clock<\/tt><tt>::time_point<\/tt><\/strong><\/td>\n<td valign=\"top\">Saat&#8217;in kulland\u0131\u011f\u0131 zaman noktas\u0131n\u0131n tipini ifade eder<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><strong><tt>clock<\/tt><\/strong><tt><strong>::is_steady\u00a0<\/strong> \u00a0 \u00a0<\/tt><\/td>\n<td valign=\"top\">\u0130lgili saatin s\u00fcrekli\/istikrarl\u0131 olup olmamas\u0131n\u0131 ifade eder. Buna a\u015fa\u011f\u0131da biraz daha de\u011finece\u011fim<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><strong><tt>clock<\/tt><tt>::now()<\/tt><\/strong><\/td>\n<td valign=\"top\">\u015eu an\u0131 ifade eden zaman noktas\u0131n\u0131 (time_point) d\u00f6ner<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Kodsal olarak g\u00f6sterecek olsak, \u015fu \u015fekilde ifade edilebilir:<\/p>\n<pre class=\"lang:c++ decode:true \">struct some_clock\r\n{\r\n using duration = chrono::duration&lt;int64_t, microseconds&gt;;\r\n using rep = duration::rep;\r\n using period = duration::period;\r\n using time_point = chrono::time_point&lt;some_clock&gt;;\r\n static constexpr bool is_steady = false;\r\n static time_point now() noexcept;\r\n};<\/pre>\n<p>Yukar\u0131daki tiplerin \u00e7o\u011fu kendini ifade etse de, bir ikisine burada de\u011finmekte fayda var:<\/p>\n<ul>\n<li>Bunlardan ilki: <em>&#8220;is_steady<\/em>&#8221; \u00f6zellikli\u011fi. bu \u00f6zellik ilgili saatin hi\u00e7 bir zaman de\u011fi\u015ftirilip\/de\u011fi\u015ftirelemeyece\u011fine ili\u015fkin bilgiyi verir (windows \u00fczerinden saati bir \u015fekilde de\u011fi\u015ftirme olarak da d\u00fc\u015f\u00fcnebilirsiniz) . K\u0131saca, bu saatin sundu\u011fu zaman noktalar\u0131\u00a0 hi\u00e7 bir zaman geriye gitmez. Bu \u00f6zelli\u011fe saat tiplerinde de de\u011finece\u011fiz,<\/li>\n<li>Bir di\u011feri ise: &#8220;<em>now()&#8221;<\/em> fonksiyonu. Bu fonksiyon ile, ilgili saati kullanan mevcut an\u0131, zaman noktas\u0131 nesnesi olarak alabiliyoruz. Tahmin edebilece\u011finiz \u00fczere, saatler i\u00e7in en \u00f6nemli fonksiyonlardan birisi budur.<\/li>\n<\/ul>\n<p>Yaz\u0131m\u0131n ba\u015f\u0131nda, STL taraf\u0131ndan sunulan birtak\u0131m saatlerin listesini sizler ile payla\u015ft\u0131m. Bu yaz\u0131mda, STL ile gelen \u00fc\u00e7 temel saate bak\u0131yor olaca\u011f\u0131z. Bunlar: <em><strong>system_clock, steady_clock<\/strong><\/em> ve <em><strong>high_resolution_clock<\/strong><\/em>.<\/p>\n<ul>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/system_clock\"><strong>system_clock<\/strong><\/a><\/span>:\n<ul>\n<li>Mevcut sistemde bulunan ger\u00e7ek zamanl\u0131 saat alt yap\u0131s\u0131 ile sunulan zaman noktalar\u0131n\u0131 alman\u0131za olanak sa\u011flar. Bu saat ayr\u0131ca,\u00a0<em>to_time_t() ve from_time_t() <\/em>fonksiyonlar\u0131 arac\u0131l\u0131\u011f\u0131yla C taraf\u0131ndan sunulan <em>time_t<\/em> ile std::chrono taraf\u0131ndan sunulan time_point tipleri aras\u0131nda d\u00f6n\u00fc\u015f\u00fcm yapman\u0131za olanak sa\u011flar.<\/li>\n<li>Bu iki API sayesinde, saatleri de kullanarak, takvimsel saat metinlerini olu\u015fturabilirsiniz (\u00f6r. Mon May 23 13:44:00 2011). Nas\u0131l m\u0131? Hemen bakal\u0131m:<\/li>\n<li>\n<pre class=\"lang:c++ decode:true\">#include &lt;chrono&gt;\r\n#include &lt;ctime&gt;\r\n#include &lt;string&gt;\r\n#include &lt;iostream&gt;\r\n\r\n\/\/ Bundan sonra kullanaca\u011f\u0131m\u0131z baz\u0131 faydal\u0131 fonksiyonlar\u0131 toplayaca\u011f\u0131m\u0131z s\u0131n\u0131ft\u0131r\r\nclass ChronoUtil {\r\npublic:\r\n    \/\/ timepoint nesnelerimizi time_t tipine, onu da takvimsel saat g\u00f6sterimine (\u00f6r. Mon May 23 13:44:00 2011), \u00e7evirmek i\u00e7in kullanaca\u011f\u0131m\u0131z fonksiyondurdur\r\n    static std::string ToString (const std::chrono::system_clock::time_point&amp; tp)    {\r\n       \/\/ sistem zaman\u0131na d\u00f6n\u00fc\u015ft\u00fcrelim:\r\n       std::time_t t = std::chrono::system_clock::to_time_t(tp);\r\n       \r\n       \/\/ takvimsel zamana d\u00f6n\u00fc\u015ft\u00fcrelim\r\n       std::string ts = ctime(&amp;t);   \r\n       \r\n       \/\/ bunun sonuna eklenen yeni sat\u0131r karakterini silelim\r\n       ts.resize(ts.size()-1);  \r\n       return ts;\r\n    }\r\n    \r\n    \/\/ Takvimsel zaman bilgilerinden, sistem saatinin time_point nesnesine \u00e7evirmek i\u00e7in kullanabilece\u011fimi fonksiyondur\r\n    static std::chrono::system_clock::time_point MakeTimePoint (int32_t year, int32_t mon, int32_t day,\r\n                   int32_t hour, int32_t min, int32_t sec = 0) {\r\n       struct std::tm t;\r\n       t.tm_sec = sec;        \/\/ Saniye (0 .. 59)\r\n       t.tm_min = min;        \/\/ Dakika (0 .. 59)\r\n       t.tm_hour = hour;      \/\/ Saat (0 .. 23)\r\n       t.tm_mday = day;       \/\/ G\u00fcn (0 .. 31)\r\n       t.tm_mon = mon-1;      \/\/ Ay (0 .. 11)\r\n       t.tm_year = year-1900; \/\/ 1900'den ge\u00e7en sene\r\n       t.tm_isdst = -1;       \/\/ G\u00fcn \u0131\u015f\u0131\u011f\u0131n\u0131 koruma var m\u0131\r\n       std::time_t tt = std::mktime(&amp;t);\r\n       \r\n       if (tt == -1) {\r\n           throw \"Ge\u00e7erli sistem zaman\u0131 yok!\";\r\n       }\r\n       return std::chrono::system_clock::from_time_t(tt);\r\n    }    \r\n};\r\n\r\nint main() {\r\n    auto tp1 = ChronoUtil::MakeTimePoint(2021, 15, 8, 21, 15, 40);\r\n    std::cout &lt;&lt; ChronoUtil::ToString(tp1) &lt;&lt; std::endl;\r\n    \r\n    return 0;\r\n}<\/pre>\n<\/li>\n<li>K\u0131saca takvimsel operasyonlar i\u00e7in bu saat tipini kullanabilirsiniz.<\/li>\n<li>C++ 20 ile birlikte, formatlama ile ilgili bir tak\u0131m ek kabiliyetler de eklenmi\u015ftir. \u0130lgili referans sayfas\u0131nda bu konuda daha net bilgi edinebilirsiniz.<\/li>\n<\/ul>\n<\/li>\n<li><strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/steady_clock\">steady_clock<\/a><\/span>:<\/strong>\n<ul>\n<li>Bu hi\u00e7bir zaman de\u011fi\u015fmeyece\u011fi garantisi verilen bir saattir. Fiziksel zaman ilerlerken, bu saate ili\u015fkin anl\u0131k zamanlar hi\u00e7bir zaman azalmazlar ve orant\u0131l\u0131 \u015fekilde\/oranda ilerlerler. Bu ne demek?<\/li>\n<li>Bu saat tipi de, \u00f6zelllikle belirli bir s\u00fcre bekleme veya bir s\u00fcreye kadar bekletme i\u00e7in tercih edilmektedir. &#8220;Stopwatch&#8221; benzeri \u00f6zellikler i\u00e7in de bu saat kullan\u0131lmal\u0131d\u0131r. \u00d6rne\u011fin, bu ama\u00e7la sistem saati kulland\u0131\u011f\u0131n\u0131z durumda, windows \u00fczerinde kullan\u0131c\u0131 e\u011fer saati de\u011fi\u015ftirir ise, sonu\u00e7 de\u011fi\u015fir. Fakat, steady_clock&#8217;ta b\u00f6yle bir durum s\u00f6z konusu de\u011fil.<\/li>\n<li>Bu saati kullanarak da, g\u00fcn\u00fcn saati veya g\u00fcn\u00fc, ay\u0131 \u00f6\u011frenemezsiniz!<\/li>\n<li>Bu saatin ba\u015flang\u0131\u00e7 zaman\u0131 genelde PC&#8217;lerde boot zaman\u0131 olabiliyor \ud83d\ude09<\/li>\n<\/ul>\n<\/li>\n<li><strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/high_resolution_clock\">high_resolution_clock<\/a><\/span>:<\/strong>\n<ul>\n<li>Bu saat, sistem \u00fczerinde en k\u0131sa ilerleme periyodunu veren saati temsil eder. Bir di\u011fer ifade ile en hassas saati ve zaman anlar\u0131n\u0131 sa\u011flar.<\/li>\n<li>\u00c7o\u011fu sistemde genelde yukar\u0131da bahsetti\u011fimiz iki saat tipini kullan\u0131r ya da farkl\u0131 bir saat de olabilir.<\/li>\n<li>Her ne kadar s\u00fcre ve benzeri \u00f6l\u00e7\u00fcmlerde, bu saat tipini insan\u0131n kullanas\u0131 gelse de, referans sayfas\u0131nda da ifade edildi\u011fi \u00fczere, steady_clock, bu anlamda daha do\u011fru bir se\u00e7im olacakt\u0131r.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>C++ standard\u0131 ve STL k\u00fct\u00fcphaneleri, bu saatlere ili\u015fkin, ba\u015flang\u0131\u00e7 zaman\u0131, minimum\/maksimum zaman an\u0131 ve \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fcne dair bir garanti vermez. Bu sebeple, kat\u0131 isterleri bulunan uygulamalar i\u00e7in, mevcut saatlerin sundu\u011fu kabiliyetler sorgulanmal\u0131d\u0131r. A\u015fa\u011f\u0131da buna ili\u015fkin \u00f6rnek bir kod par\u00e7as\u0131n\u0131 g\u00f6rebilirsiniz. Bu kod par\u00e7as\u0131, yukar\u0131daki \u00fc\u00e7 saat tipi i\u00e7in ilgili bilgileri sizlere sunar:<\/p>\n<pre class=\"lang:c++ decode:true\">\/\/ clockProperties.cpp\r\n\r\n#include &lt;chrono&gt;\r\n#include &lt;iomanip&gt;\r\n#include &lt;iostream&gt;\r\n\r\nclass ChronoUtil { \r\npublic:\r\n    \/\/ Saati \u015fablon parametresi olarak ge\u00e7irelim\r\n    template &lt;typename T&gt;\r\n    static void PrintClockInfo(){ \r\n        std::cout &lt;&lt; \"  precision: \" &lt;&lt; T::num &lt;&lt; \"\/\" &lt;&lt; T::den &lt;&lt; \" second \" &lt;&lt; \"\\n\";\r\n        typedef typename std::ratio_multiply&lt;T,std::kilo&gt;::type MillSec;\r\n        typedef typename std::ratio_multiply&lt;T,std::mega&gt;::type MicroSec;\r\n        std::cout &lt;&lt; std::fixed;\r\n        std::cout &lt;&lt; \"             \" &lt;&lt; static_cast&lt;double&gt;(MillSec::num)\/MillSec::den &lt;&lt; \" milliseconds \"   &lt;&lt; \"\\n\";\r\n        std::cout &lt;&lt; \"             \" &lt;&lt; static_cast&lt;double&gt;(MicroSec::num)\/MicroSec::den &lt;&lt; \" microseconds \" &lt;&lt; \"\\n\";\r\n    }\r\n};\r\n\r\nint main(){\r\n    \r\n    std::cout &lt;&lt; std::boolalpha &lt;&lt; \"\\n\";\r\n    \r\n    std::cout &lt;&lt; \"std::chrono::system_clock: \" &lt;&lt; \"\\n\";\r\n    std::cout &lt;&lt; \"  is steady: \" &lt;&lt; std::chrono::system_clock::is_steady &lt;&lt; \"\\n\";\r\n    ChronoUtil::PrintClockInfo&lt;std::chrono::system_clock::period&gt;();\r\n    \r\n    std::cout &lt;&lt; \"\\n\";\r\n    \r\n    std::cout &lt;&lt; \"std::chrono::steady_clock: \" &lt;&lt; \"\\n\";\r\n    std::cout &lt;&lt; \"  is steady: \" &lt;&lt; std::chrono::steady_clock::is_steady &lt;&lt; \"\\n\";\r\n    ChronoUtil::PrintClockInfo&lt;std::chrono::steady_clock::period&gt;();\r\n    \r\n    std::cout &lt;&lt; \"\\n\";\r\n    \r\n    std::cout &lt;&lt; \"std::chrono::high_resolution_clock: \" &lt;&lt; \"\\n\";\r\n    std::cout &lt;&lt; \"  is steady: \" &lt;&lt; std::chrono::high_resolution_clock::is_steady &lt;&lt; \"\\n\";\r\n    ChronoUtil::PrintClockInfo&lt;std::chrono::high_resolution_clock::period&gt;();\r\n    \r\n    \r\n    std::cout &lt;&lt; \"\\n\";\r\n    \r\n    return 0;\r\n}<\/pre>\n<p>Benim makinemde, yukar\u0131daki kod a\u015fa\u011f\u0131daki gibi bir sonu\u00e7 verdi. G\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere high_resolution_clock, steady_clock ile benzer \u00f6zellikleri sergiliyor.<\/p>\n<pre class=\"lang:sh decode:true\">std::chrono::system_clock:\r\n  is steady: false\r\n  precision: 1\/10000000 second\r\n             0.000100 milliseconds\r\n             0.100000 microseconds\r\n\r\nstd::chrono::steady_clock:\r\n  is steady: true\r\n  precision: 1\/1000000000 second\r\n             0.000001 milliseconds\r\n             0.001000 microseconds\r\n\r\nstd::chrono::high_resolution_clock:\r\n  is steady: true\r\n  precision: 1\/1000000000 second\r\n             0.000001 milliseconds\r\n             0.001000 microseconds<\/pre>\n<p>Saatlere bu kadar e\u011fildikten sonra, s\u0131ra geldi, std::chrono konusunda de\u011finece\u011fimiz zaman anlar\u0131na bir di\u011fer ifade ile &#8220;time_point&#8221;.<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>Zaman Anlar\u0131 (&#8220;time_point&#8221;)<\/strong><\/span><\/h2>\n<p>std::chrono ile sunulan zaman anlar\u0131n\u0131 her ne kadar sona b\u0131raksak da, asl\u0131na bakarsan\u0131z, bu k\u00fct\u00fcphanenin en \u00f6nemli s\u0131n\u0131flar\u0131ndan birisidir kendisi. Daha \u00f6nce de ifade etti\u011fimiz \u00fczere, zaman an\u0131 (&#8220;time_point&#8221;), bir saat, bu saatin ba\u015flang\u0131\u00e7 zaman\u0131 (&#8220;epoch&#8221;) ve ondan bu yana ge\u00e7en s\u00fcre ile tan\u0131mlanan an\u0131 ifade eder.<\/p>\n<p>\u0130lk yaz\u0131mda, sizler ile payla\u015ft\u0131\u011f\u0131m bir fig\u00fcr ile bu kavram\u0131 sizlere ifade etmeye \u00e7al\u0131\u015faca\u011f\u0131m. Asl\u0131na bakarsan\u0131z, zaman an\u0131, belirlenen bu epoch zaman\u0131ndan, belirli bir s\u00fcre \u00f6nce ya da sonraki an\u0131 ifade eden kavramd\u0131r.<\/p>\n<p id=\"UjgPUwW\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2270 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/08\/img_611ab5f5b7863.png\" alt=\"\" width=\"449\" height=\"273\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/08\/img_611ab5f5b7863.png 360w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/08\/img_611ab5f5b7863-300x183.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/08\/img_611ab5f5b7863-150x91.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/08\/img_611ab5f5b7863-200x122.png 200w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><\/p>\n<p>Hatta yukar\u0131da, &#8220;MakeTimePoint&#8221; fonksiyonu ile birlikte herhangi bir takvim tarih\/saatinden zaman an\u0131 nas\u0131l elde edece\u011fimizi de g\u00f6rm\u00fc\u015ft\u00fck. Bu s\u0131n\u0131f a\u015fa\u011f\u0131daki gibi tan\u0131mlanmaktad\u0131r:<\/p>\n<pre class=\"lang:c++ decode:true \">namespace std {\r\n   namespace chrono {\r\n     template &lt;typename Clock,\r\n               typename Duration = typename Clock::duration&gt;\r\n         class time_point;\r\n   }\r\n}<\/pre>\n<p>Her bir saat ile sunulan d\u00f6rt \u00f6nemli zaman an\u0131 bulunmaktad\u0131r (tahmin edece\u011finiz \u00fczere bunlar sunulan API&#8217;ler ile sa\u011flan\u0131yor, kaynak i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/time_point\">bu sayfaya<\/a> <\/strong><\/span>bakabilirsiniz:)<\/p>\n<ul>\n<li><strong>epoch<\/strong>: ba\u015flang\u0131\u00e7 zaman an\u0131. Bunun i\u00e7in bir API yok. \u0130lgili time_point varsay\u0131lan yap\u0131c\u0131s\u0131 ile olu\u015fturulan, zaman an\u0131 nesnesi bunu ifade eder,<\/li>\n<li><strong>now<\/strong>(): mevcut zaman an\u0131n\u0131 ifade eden de\u011feri almak i\u00e7in kullan\u0131labilecek statik fonksiyon,<\/li>\n<li><strong>min<\/strong>(): bu saat ile ifade edilen minimum zaman an\u0131n\u0131 ifade eden de\u011feri almak i\u00e7in kullan\u0131labilecek statik fonksiyon,<\/li>\n<li><strong>max<\/strong>(): bu saat ile ifade edilen maksimum zaman an\u0131n\u0131 ifade eden de\u011feri almak i\u00e7in kullan\u0131labilecek statik fonksiyon.<\/li>\n<\/ul>\n<p>Yukar\u0131da tan\u0131mlamaya ba\u015flad\u0131\u011f\u0131m\u0131z <em>ChronoUtils<\/em> s\u0131n\u0131f\u0131na birka\u00e7 fonksiyon daha ekleyelim hadi.<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;chrono&gt;\r\n#include &lt;ctime&gt;\r\n#include &lt;string&gt;\r\n#include &lt;iostream&gt;\r\n\r\n\/\/ Bundan sonra kullanaca\u011f\u0131m\u0131z baz\u0131 faydal\u0131 fonksiyonlar\u0131 toplayaca\u011f\u0131m\u0131z s\u0131n\u0131ft\u0131r\r\nclass ChronoUtil {\r\npublic:\r\n    \/\/ timepoint nesnelerimizi time_t tipine, onu da takvimsel saat g\u00f6sterimine (\u00f6r. Mon May 23 13:44:00 2011), \u00e7evirmek i\u00e7in kullanaca\u011f\u0131m\u0131z fonksiyondurdur\r\n    static std::string ToString (const std::chrono::system_clock::time_point&amp; tp)    {\r\n       \/\/ sistem zaman\u0131na d\u00f6n\u00fc\u015ft\u00fcrelim:\r\n       std::time_t t = std::chrono::system_clock::to_time_t(tp);\r\n       \r\n       \/\/ takvimsel zamana d\u00f6n\u00fc\u015ft\u00fcrelim\r\n       std::string ts = ctime(&amp;t);   \r\n       \r\n       \/\/ bunun sonuna eklenen yeni sat\u0131r karakterini silelim\r\n       ts.resize(ts.size()-1);  \r\n       return ts;\r\n    }\r\n};\r\n\r\nint main() {\r\n     \/\/ Sistem saatinin, ba\u015flang\u0131\u00e7 zaman\u0131na bakal\u0131m\r\n     std::chrono::system_clock::time_point tp;\r\n     std::cout &lt;&lt; \"epoch: \" &lt;&lt; ChronoUtil::ToString(tp) &lt;&lt; \"\\n\";\r\n\r\n     \/\/ Sistem saatinin mevcut an\u0131na bakal\u0131m\r\n     tp = std::chrono::system_clock::now();\r\n     std::cout &lt;&lt; \"now:   \" &lt;&lt; ChronoUtil::ToString(tp) &lt;&lt; \"\\n\";\r\n\r\n     \/\/ Sistem saati ile ifade edilebilecek minimum zaman an\u0131na bakal\u0131m\r\n     tp = std::chrono::system_clock::time_point::min();\r\n     std::cout &lt;&lt; \"min:   \" &lt;&lt; ChronoUtil::ToString(tp) &lt;&lt; \"\\n\";\r\n\r\n     \/\/ Sistem saati ile ifade edilebilecek maksimum zaman an\u0131na bakal\u0131m\r\n     tp = std::chrono::system_clock::time_point::max();\r\n     std::cout &lt;&lt; \"max:   \" &lt;&lt; ChronoUtil::ToString(tp) &lt;&lt; \"\\n\";\r\n     \r\n     return 0;\r\n}<\/pre>\n<p>yukar\u0131daki kodu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131mda a\u015fa\u011f\u0131daki gibi bir sonu\u00e7 al\u0131yoruz:<\/p>\n<pre class=\"lang:c++ decode:true\">epoch: Thu Jan  1 00:00:00 1970\r\nnow:   Mon Aug 16 19:10:25 2021\r\nmin:   Tue Sep 21 00:12:44 1677\r\nmax:   Fri Apr 11 23:47:16 2262<\/pre>\n<p>Zaman anlar\u0131 ile ilgili bir di\u011fer \u00f6nemli konu da, bu nesneleri (elbette ayn\u0131 saate ait) birbirleri ile <strong>aritmetik operasyonlarda<\/strong> kullanabilmenizdir (toplama, \u00e7\u0131karma, kar\u015f\u0131la\u015ft\u0131rma, vb. Tam liste i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/time_point\">referans sayfas\u0131na<\/a> <\/strong><\/span>ba\u015fvurabilirsiniz). \u00d6r. Basit\u00e7e iki zaman an\u0131 aras\u0131ndaki s\u00fcreyi \u00f6l\u00e7mek istiyoruz ne yapaca\u011f\u0131z? A\u015fa\u011f\u0131daki iki \u00fc\u00e7 sat\u0131rl\u0131k kod ile ne yap\u0131labilece\u011fini g\u00f6rebilirsiniz. Umar\u0131m kafan\u0131zda \u015fimdi daha netle\u015fmi\u015ftir. Bu ve benzeri kullan\u0131mlara ili\u015fkin de ayr\u0131ca bir yaz\u0131 yazmay\u0131 planl\u0131yorum bu arada.<\/p>\n<pre class=\"lang:c++ decode:true \">auto t1 = std::chrono::system_clock::now() ;\r\n\r\n\/\/ \u00d6l\u00e7ece\u011fimiz k\u0131s\u0131m\r\n\r\nauto t2 = std::chrono::system_clock::now() ;\r\n\r\n\/\/ Aritmetik operasyonlarda s\u0131k\u0131nt\u0131 yokhttps:\/\/www.yazilimperver.com\/wp-admin\/post.php?post=2240&amp;action=edit#\r\nauto resultTp = t2 - t1 ;\r\n\r\n\/\/ Elbette bu farkl\u0131 s\u00fcre olarak ifade etmek i\u00e7in, bir d\u00f6n\u00fc\u015f\u00fcme ihtiyac\u0131m\u0131z var.\r\n\/\/ O noktada da duration_cast yard\u0131m\u0131m\u0131za yeti\u015fiyor\r\n std::chrono::milliseconds resultInMsec = std::chrono::duration_cast&lt;  std::chrono::milliseconds &gt; ( resultTp );\r\n std::cout &lt;&lt; resultInMsec.count() &lt;&lt; \"\\n\";<\/pre>\n<p>Evet, sevgili yaz\u0131l\u0131mperver dostlar\u0131m bir di\u011fer \u00f6nemli C++ 11 k\u00fct\u00fcphanesine ili\u015fkin yaz\u0131m\u0131n da sonuna gelmi\u015f bulunuyoruz. Elbette, std::chrono&#8217;a ili\u015fkin b\u00fct\u00fcn kabiliyetler bunlar ile s\u0131n\u0131rl\u0131 de\u011fil ama umuyorum ki, bu yaz\u0131lar size, daha detayl\u0131 bilgilere dalma ve kabiliyeti kullanmak i\u00e7in yard\u0131mc\u0131 olur. Bundan sonra da std::chrono ile ilgili bir ka\u00e7 \u00f6rnek kod par\u00e7as\u0131n\u0131 da sizler ile payla\u015f\u0131yor olaca\u011f\u0131m (\u00e7e\u015fitli a\u00e7\u0131k kaynak projelerden ya da kendi yazd\u0131\u011f\u0131m kodlardan). Yaz\u0131y\u0131 bitirmeden \u00f6nce, bu k\u00fct\u00fcphane ile ilgili izledi\u011fim bir video ve bu videoya ili\u015fkin sunumu da sizler ile payla\u015f\u0131yorum. Bu yaz\u0131 biraz haftal\u0131k video yaz\u0131lar\u0131mdan da rol \u00e7ald\u0131 ama olsun \ud83d\ude42<\/p>\n<p>&nbsp;<\/p>\n<p><iframe loading=\"lazy\" title=\"CppCon 2016: Howard Hinnant \u201cA \uff1cchrono\uff1e Tutorial&quot;\" width=\"780\" height=\"439\" src=\"https:\/\/www.youtube.com\/embed\/P32hvk8b13M?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p>Videoya ili\u015fkin sunuma da <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/CppCon\/CppCon2016\/blob\/master\/Tutorials\/A%20chrono%20Tutorial\/A%20chrono%20Tutorial%20-%20Howard%20Hinnant%20-%20CppCon%202016.pdf\">buradan<\/a> <\/strong><\/span>ula\u015fabilirsiniz.<\/p>\n<p>Bir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek dile\u011fiyle kendinize \u00e7ok iyi bak\u0131n, sa\u011fl\u0131kla kal\u0131n. Bol kodlu g\u00fcnler \ud83d\ude42<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>Kaynaklar<\/strong><\/span><\/h2>\n<ul>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\"><strong>https:\/\/en.cppreference.com\/w\/cpp\/chrono<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/time_point\"><strong>https:\/\/en.cppreference.com\/w\/cpp\/chrono\/time_point<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/high_resolution_clock\">https:\/\/en.cppreference.com\/w\/cpp\/chrono\/high_resolution_clock<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/system_clock\">https:\/\/en.cppreference.com\/w\/cpp\/chrono\/system_clock<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/chrono\/steady_clock\">https:\/\/en.cppreference.com\/w\/cpp\/chrono\/steady_clock<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/CppCon\/CppCon2016\/blob\/master\/Tutorials\/A%20chrono%20Tutorial\/A%20chrono%20Tutorial%20-%20Howard%20Hinnant%20-%20CppCon%202016.pdf\">https:\/\/github.com\/CppCon\/CppCon2016\/blob\/master\/Tutorials\/A%20chrono%20Tutorial\/A%20chrono%20Tutorial%20-%20Howard%20Hinnant%20-%20CppCon%202016.pdf<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"http:\/\/antoniak.in\/blog\/2017\/04\/14\/managing-time-std-chrono\/\"><strong>http:\/\/antoniak.in\/blog\/2017\/04\/14\/managing-time-std-chrono\/<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/www.informit.com\/articles\/article.aspx?p=1881386&amp;seqNum=2\"><strong>https:\/\/www.informit.com\/articles\/article.aspx?p=1881386&amp;seqNum=2<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/www.modernescpp.com\/index.php\/the-three-clocks\"><strong>https:\/\/www.modernescpp.com\/index.php\/the-three-clocks<\/strong><\/a><\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Evet yaz\u0131l\u0131mperver dostlar\u0131m, std::chrone k\u00fct\u00fcphanesi maceram\u0131za devam ediyoruz. \u0130lk yaz\u0131m\u0131 okumayan yaz\u0131l\u0131mperver dostlar\u0131m\u0131z\u0131n, \u00f6ncelikle o yaz\u0131ma bakmalar\u0131nda fayda var. A\u015fa\u011f\u0131ya ilgili yaz\u0131n\u0131n ba\u011flant\u0131s\u0131n\u0131 ekliyorum: Haftal\u0131k C++ 39 &#8211; std::chrono &#8211; 1 \u0130lk yaz\u0131m\u0131zda, std::chrono taraf\u0131ndan sunulan \u00fc\u00e7 \u00f6nemli kavram olan,\u00a0s\u00fcre (\u201cduration\u201d), saat (\u201cclock\u201c) ve zaman noktas\u0131 (\u201ctime_point\u201c)&#8217;a de\u011finmi\u015f ve s\u00fcre kavram\u0131n\u0131 ve kabiliyetlerini detayl\u0131 bir&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[10,41],"tags":[46,895,881,878,894,891,893,806,805,892],"class_list":["post-2240","post","type-post","status-publish","format-standard","hentry","category-c","category-modern-c","tag-c-11","tag-calender-time","tag-clock","tag-duration","tag-high_resolution_clock","tag-stdchrono","tag-steady_clock","tag-system_clock","tag-time_point","tag-utc_clock"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Haftal\u0131k C++ 40 - std::chrono - 2 (clocks, time_point) - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Haftal\u0131k C++ 40 - std::chrono - 2 (clocks, time_point) - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Evet yaz\u0131l\u0131mperver dostlar\u0131m, std::chrone k\u00fct\u00fcphanesi maceram\u0131za devam ediyoruz. \u0130lk yaz\u0131m\u0131 okumayan yaz\u0131l\u0131mperver dostlar\u0131m\u0131z\u0131n, \u00f6ncelikle o yaz\u0131ma bakmalar\u0131nda fayda var. A\u015fa\u011f\u0131ya ilgili yaz\u0131n\u0131n ba\u011flant\u0131s\u0131n\u0131 ekliyorum: Haftal\u0131k C++ 39 &#8211; std::chrono &#8211; 1 \u0130lk yaz\u0131m\u0131zda, std::chrono taraf\u0131ndan sunulan \u00fc\u00e7 \u00f6nemli kavram olan,\u00a0s\u00fcre (\u201cduration\u201d), saat (\u201cclock\u201c) ve zaman noktas\u0131 (\u201ctime_point\u201c)&#8217;a de\u011finmi\u015f ve s\u00fcre kavram\u0131n\u0131 ve kabiliyetlerini detayl\u0131 bir... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2021-08-16T20:30:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-08-16T20:30:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/08\/img_611ab5f5b7863.png\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"Haftal\u0131k C++ 40 &#8211; std::chrono &#8211; 2 (clocks, time_point)\",\"datePublished\":\"2021-08-16T20:30:16+00:00\",\"dateModified\":\"2021-08-16T20:30:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/\"},\"wordCount\":1808,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"C++ 11\",\"calender time\",\"clock\",\"duration\",\"high_resolution_clock\",\"std::chrono\",\"steady_clock\",\"system_clock\",\"time_point\",\"utc_clock\"],\"articleSection\":[\"C++\",\"Modern C++\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/\",\"name\":\"Haftal\u0131k C++ 40 - std::chrono - 2 (clocks, time_point) - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2021-08-16T20:30:16+00:00\",\"dateModified\":\"2021-08-16T20:30:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Haftal\u0131k C++ 40 &#8211; std::chrono &#8211; 2 (clocks, time_point)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Haftal\u0131k C++ 40 - std::chrono - 2 (clocks, time_point) - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/","og_locale":"tr_TR","og_type":"article","og_title":"Haftal\u0131k C++ 40 - std::chrono - 2 (clocks, time_point) - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Evet yaz\u0131l\u0131mperver dostlar\u0131m, std::chrone k\u00fct\u00fcphanesi maceram\u0131za devam ediyoruz. \u0130lk yaz\u0131m\u0131 okumayan yaz\u0131l\u0131mperver dostlar\u0131m\u0131z\u0131n, \u00f6ncelikle o yaz\u0131ma bakmalar\u0131nda fayda var. A\u015fa\u011f\u0131ya ilgili yaz\u0131n\u0131n ba\u011flant\u0131s\u0131n\u0131 ekliyorum: Haftal\u0131k C++ 39 &#8211; std::chrono &#8211; 1 \u0130lk yaz\u0131m\u0131zda, std::chrono taraf\u0131ndan sunulan \u00fc\u00e7 \u00f6nemli kavram olan,\u00a0s\u00fcre (\u201cduration\u201d), saat (\u201cclock\u201c) ve zaman noktas\u0131 (\u201ctime_point\u201c)&#8217;a de\u011finmi\u015f ve s\u00fcre kavram\u0131n\u0131 ve kabiliyetlerini detayl\u0131 bir... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2021-08-16T20:30:16+00:00","article_modified_time":"2021-08-16T20:30:46+00:00","og_image":[{"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/08\/img_611ab5f5b7863.png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"14 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"Haftal\u0131k C++ 40 &#8211; std::chrono &#8211; 2 (clocks, time_point)","datePublished":"2021-08-16T20:30:16+00:00","dateModified":"2021-08-16T20:30:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/"},"wordCount":1808,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["C++ 11","calender time","clock","duration","high_resolution_clock","std::chrono","steady_clock","system_clock","time_point","utc_clock"],"articleSection":["C++","Modern C++"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/","name":"Haftal\u0131k C++ 40 - std::chrono - 2 (clocks, time_point) - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2021-08-16T20:30:16+00:00","dateModified":"2021-08-16T20:30:46+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/08\/16\/haftalik-c-39-stdchrono-2-clocks-time_point\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"Haftal\u0131k C++ 40 &#8211; std::chrono &#8211; 2 (clocks, time_point)"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2240","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=2240"}],"version-history":[{"count":13,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2240\/revisions"}],"predecessor-version":[{"id":2275,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2240\/revisions\/2275"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=2240"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=2240"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=2240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}