<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[&amp;lt;chrono&amp;gt; verwenden - ist das so richtig?]]></title><description><![CDATA[<p>Die Frage dürfte ziemlich dumm sein - aber ich verwende grade das erste mal &lt;chrono&gt; und C++11 im allgemeinen und bin mir etwas unsicher.</p>
<pre><code class="language-cpp">#include &lt;chrono&gt;
#include &lt;iostream&gt;

int main(int argc, char* argv[])
{ 
    // Anfang
    std::chrono::steady_clock::time_point tStart = std::chrono::steady_clock::now();

    // Zeit schinden
    for (int i=0;i&lt;999999;i++)
    {
    }   

    // Ende 
    std::chrono::steady_clock::time_point tEnd = std::chrono::steady_clock::now();  

    auto duration = tEnd - tStart;
    std::cout &lt;&lt; &quot;Elapsed time (ms): &quot; &lt;&lt; std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;( duration ).count() &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>Ist das so korrekt und würdet ihr die Timer aus &lt;chrono&gt; für ein Spiel verwenden?<br />
Ich hab eine Ausgabe von 3 oder 4ms (schwankt) und das erscheint mir ein wenig hoch für knapp 1 Mio (leere) Loops auf einem 3.2GhZ DualCore.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/309380/lt-chrono-gt-verwenden-ist-das-so-richtig</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 06:30:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/309380.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Oct 2012 04:37:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &amp;lt;chrono&amp;gt; verwenden - ist das so richtig? on Mon, 22 Oct 2012 04:37:51 GMT]]></title><description><![CDATA[<p>Die Frage dürfte ziemlich dumm sein - aber ich verwende grade das erste mal &lt;chrono&gt; und C++11 im allgemeinen und bin mir etwas unsicher.</p>
<pre><code class="language-cpp">#include &lt;chrono&gt;
#include &lt;iostream&gt;

int main(int argc, char* argv[])
{ 
    // Anfang
    std::chrono::steady_clock::time_point tStart = std::chrono::steady_clock::now();

    // Zeit schinden
    for (int i=0;i&lt;999999;i++)
    {
    }   

    // Ende 
    std::chrono::steady_clock::time_point tEnd = std::chrono::steady_clock::now();  

    auto duration = tEnd - tStart;
    std::cout &lt;&lt; &quot;Elapsed time (ms): &quot; &lt;&lt; std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;( duration ).count() &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>Ist das so korrekt und würdet ihr die Timer aus &lt;chrono&gt; für ein Spiel verwenden?<br />
Ich hab eine Ausgabe von 3 oder 4ms (schwankt) und das erscheint mir ein wenig hoch für knapp 1 Mio (leere) Loops auf einem 3.2GhZ DualCore.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2262635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2262635</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 22 Oct 2012 04:37:51 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;chrono&amp;gt; verwenden - ist das so richtig? on Mon, 22 Oct 2012 05:04:47 GMT]]></title><description><![CDATA[<p>Das kann man schon so machen, auch wenn ich es bevorzugen würde, die Zeit in Sekunden zu bekommen. (num durch den teilen.)<br />
Insbesondere in Spielen würde ich wohl auch mit float/double rechnen, das macht das alles irgendwie wesentlich mehr &quot;straight forward&quot;, und die fehlende Präzision sollte zu verkraften sein. Ansonsten interessiert dich vielleicht, was ich für kleine Spiele nutze:</p>
<pre><code class="language-cpp">template &lt;typename Clock = std::chrono::steady_clock&gt;
class stopwatch
{
    typename Clock::time_point last_;

public:
    stopwatch()
        : last_(Clock::now())
    {}

    void reset()
    {
        *this = stopwatch();
    }

    typename Clock::duration elapsed() const
    {
        return Clock::now() - last_;
    }

    typename Clock::duration tick()
    {
        auto now = Clock::now();
        auto elapsed = now - last_;
        last_ = now;
        return elapsed;
    }
};

template &lt;typename T, typename Rep, typename Period&gt;
T duration_cast(const std::chrono::duration&lt;Rep, Period&gt;&amp; duration)
{
    return duration.count() * static_cast&lt;T&gt;(Period::num) / static_cast&lt;T&gt;(Period::den);
}

int main()
{
    stopwatch&lt;&gt; sw;
    // ...
    std::cout &lt;&lt; &quot;Elapsed: &quot; &lt;&lt; duration_cast&lt;double&gt;(sw.elapsed()) &lt;&lt; '\n';
}
</code></pre>
<p>Hier kann man z.B. noch eine clock bauen die QueryPerformanceCounter nutzt, und einfach als Templateparameter angeben. (Falls dir ein besserer Name für duration_cast einfällt, nur zu. :))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2262638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2262638</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 22 Oct 2012 05:04:47 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;chrono&amp;gt; verwenden - ist das so richtig? on Tue, 23 Oct 2012 16:08:43 GMT]]></title><description><![CDATA[<p>wenn das 3-4ms dauert hast Du wahrscheinlich nicht optimiert übersetzt, weil dann sollte die Schleife verschwinden. Gleichzeitig solltest Du beachten, dass die Timer nicht beliebig klein auflösen. Wenn das auf clock() abgebildet wird, ist auf vielen OSen die Auflösung im Bereich von 1ms oder größer.</p>
<p>Genaueres sollten Dir aber die Beschreibungen zu &lt;chrono&gt; sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2263283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2263283</guid><dc:creator><![CDATA[debugmode]]></dc:creator><pubDate>Tue, 23 Oct 2012 16:08:43 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;chrono&amp;gt; verwenden - ist das so richtig? on Tue, 23 Oct 2012 16:10:25 GMT]]></title><description><![CDATA[<p>debugmode schrieb:</p>
<blockquote>
<p>wenn das 3-4ms dauert hast Du wahrscheinlich nicht optimiert übersetzt, weil dann sollte die Schleife verschwinden. Gleichzeitig solltest Du beachten, dass die Timer nicht beliebig klein auflösen. Wenn das auf clock() abgebildet wird, ist auf vielen OSen die Auflösung im Bereich von 1ms oder größer.</p>
<p>Genaueres sollten Dir aber die Beschreibungen zu &lt;chrono&gt; sagen.</p>
</blockquote>
<p>Ne, die Schleife soll ja bleiben sonst gibts ja immer nur 0 als Ausgabe :P.<br />
Aber ich habs mittlerweile kapiert^^.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2263285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2263285</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 23 Oct 2012 16:10:25 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;lt;chrono&amp;gt; verwenden - ist das so richtig? on Tue, 23 Oct 2012 22:37:09 GMT]]></title><description><![CDATA[<blockquote>
<p>Das kann man schon so machen, auch wenn ich es bevorzugen würde, die Zeit in Sekunden zu bekommen.</p>
</blockquote>
<p>Und warum nicht den duration_cast fuer Sekunden nutzen und einfach nach double casten anstatt einen eigenen duration_cast anzubieten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2263355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2263355</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 23 Oct 2012 22:37:09 GMT</pubDate></item></channel></rss>