<?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[Problem mit time.h, clock() und Zeitmessung im Allgemeinen bei C&#x2F;C++ Code Mischmasch]]></title><description><![CDATA[<p>Ich habe hier ein Stück Code das etwa folgendermaßen aussieht:</p>
<p>[code]<br />
#include &lt;time.h&gt;<br />
#include &quot;function.h&quot; // meine Eigenen Funktionsdeklarationen aller meiner Funktionen in allen Quellcodedateien dieses Programmes</p>
<p>int meine_funktion(int par_1, int par_2 usw..)<br />
{<br />
clock_t t1, t2;<br />
.<br />
.<br />
// ein paar Variablendefinitionen und weiteres unwichtiges Zeug</p>
<p>t1 = clock();<br />
do<br />
// darin liegen 5 weitere do while Schleifen,<br />
// sowie 2 Funktionsaufrufe zu eigenen Funktionen, die aber in einer<br />
// anderen Quellcodedatei genau definiert sind.<br />
// Lediglich die Deklarationen stehen in der oben eingebundenen Headerdatei<br />
while (AUSDRUCK);</p>
<p>// Marker 123, siehe Text weiter unten</p>
<p>t2 = clock();<br />
cout &lt;&lt; &quot;Die Zeit der Berechnung betrug: &quot; &lt;&lt; (double) (t2-t1)*1000/CLOCKS_PER_SEC &lt;&lt; &quot; msec.&quot; &lt;&lt; endl;<br />
return 0;<br />
}</p>
<p>Das Problem an dem ganzen Programm ist, daß die gemessene Zeit<br />
immer 0 ist, obwohl die Berechnung innerhalb der geschachtelten do while Schleifen deutlich länger ist.</p>
<p>Erst wenn ich an der Stelle in dem ich das Kommentar mit dem &quot;Marker 123&quot;<br />
erwähnt habe, eine For Schleife einbaue, die das darin liegende int i= 0 bis 50000 10 mal um 1 erhöt, berechnet, erhalte ich für meine Zeit einen Meßwert.</p>
<p>Der Compiler ist der GNU g++ Compiler.<br />
Das ganze wird unter Linux compiliert.</p>
<p>Meine Frage, warum ist das so?<br />
Ich kann mir das nicht erklären.</p>
<p>Muß ich vielleicht die Headerdatei &lt;time.h&gt; auch in den anderen Funktionen, die ich innerhalb der do While Schleife aufrufe, includieren?<br />
Daran kann es doch aber nicht leigen, schließlich brauche ich die Time Funktionen nicht in diesen aufgerufenen Funktionen.</p>
<p>Woran liegt das also?<br />
Warum erhalte ich nur 0 Sekunden als Wert?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/229015/problem-mit-time-h-clock-und-zeitmessung-im-allgemeinen-bei-c-c-code-mischmasch</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 06:35:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/229015.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 06 Dec 2008 03:18:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit time.h, clock() und Zeitmessung im Allgemeinen bei C&#x2F;C++ Code Mischmasch on Sat, 06 Dec 2008 03:18:08 GMT]]></title><description><![CDATA[<p>Ich habe hier ein Stück Code das etwa folgendermaßen aussieht:</p>
<p>[code]<br />
#include &lt;time.h&gt;<br />
#include &quot;function.h&quot; // meine Eigenen Funktionsdeklarationen aller meiner Funktionen in allen Quellcodedateien dieses Programmes</p>
<p>int meine_funktion(int par_1, int par_2 usw..)<br />
{<br />
clock_t t1, t2;<br />
.<br />
.<br />
// ein paar Variablendefinitionen und weiteres unwichtiges Zeug</p>
<p>t1 = clock();<br />
do<br />
// darin liegen 5 weitere do while Schleifen,<br />
// sowie 2 Funktionsaufrufe zu eigenen Funktionen, die aber in einer<br />
// anderen Quellcodedatei genau definiert sind.<br />
// Lediglich die Deklarationen stehen in der oben eingebundenen Headerdatei<br />
while (AUSDRUCK);</p>
<p>// Marker 123, siehe Text weiter unten</p>
<p>t2 = clock();<br />
cout &lt;&lt; &quot;Die Zeit der Berechnung betrug: &quot; &lt;&lt; (double) (t2-t1)*1000/CLOCKS_PER_SEC &lt;&lt; &quot; msec.&quot; &lt;&lt; endl;<br />
return 0;<br />
}</p>
<p>Das Problem an dem ganzen Programm ist, daß die gemessene Zeit<br />
immer 0 ist, obwohl die Berechnung innerhalb der geschachtelten do while Schleifen deutlich länger ist.</p>
<p>Erst wenn ich an der Stelle in dem ich das Kommentar mit dem &quot;Marker 123&quot;<br />
erwähnt habe, eine For Schleife einbaue, die das darin liegende int i= 0 bis 50000 10 mal um 1 erhöt, berechnet, erhalte ich für meine Zeit einen Meßwert.</p>
<p>Der Compiler ist der GNU g++ Compiler.<br />
Das ganze wird unter Linux compiliert.</p>
<p>Meine Frage, warum ist das so?<br />
Ich kann mir das nicht erklären.</p>
<p>Muß ich vielleicht die Headerdatei &lt;time.h&gt; auch in den anderen Funktionen, die ich innerhalb der do While Schleife aufrufe, includieren?<br />
Daran kann es doch aber nicht leigen, schließlich brauche ich die Time Funktionen nicht in diesen aufgerufenen Funktionen.</p>
<p>Woran liegt das also?<br />
Warum erhalte ich nur 0 Sekunden als Wert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626039</guid><dc:creator><![CDATA[Zeitproblem]]></dc:creator><pubDate>Sat, 06 Dec 2008 03:18:08 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit time.h, clock() und Zeitmessung im Allgemeinen bei C&#x2F;C++ Code Mischmasch on Sat, 06 Dec 2008 03:19:20 GMT]]></title><description><![CDATA[<p>Sorry, Abschlußtag vergessen.</p>
<p>So sieht der Code aus:</p>
<pre><code>#include &lt;time.h&gt;
#include &quot;function.h&quot; // meine Eigenen Funktionsdeklarationen aller meiner Funktionen in allen Quellcodedateien dieses Programmes

int meine_funktion(int par_1, int par_2 usw..)
{
  clock_t t1, t2;
  .
  .
  // ein paar Variablendefinitionen und weiteres unwichtiges Zeug

  t1 = clock();
  do
    // darin liegen 5 weitere do while Schleifen, 
    // sowie 2 Funktionsaufrufe zu eigenen Funktionen, die aber in einer
    // anderen Quellcodedatei genau definiert sind. 
    // Lediglich die Deklarationen stehen in der oben eingebundenen Headerdatei
  while (AUSDRUCK);

  // Marker 123, siehe Text weiter unten

  t2 = clock();
  cout &lt;&lt; &quot;Die Zeit der Berechnung betrug: &quot; &lt;&lt; (double) (t2-t1)*1000/CLOCKS_PER_SEC &lt;&lt; &quot; msec.&quot; &lt;&lt; endl;
  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1626040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626040</guid><dc:creator><![CDATA[Zeitproblem]]></dc:creator><pubDate>Sat, 06 Dec 2008 03:19:20 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit time.h, clock() und Zeitmessung im Allgemeinen bei C&#x2F;C++ Code Mischmasch on Sat, 06 Dec 2008 03:26:23 GMT]]></title><description><![CDATA[<p>Ach ja, eines ist vielleicht noch erwähnenswert.</p>
<p>Eine Funktione die innerhalb der do-while Schleife aufgerufen wird,<br />
öffnet und schließt eine Datei und macht einen system(&quot;Programm&quot;) Call.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626041</guid><dc:creator><![CDATA[Zeitproblem]]></dc:creator><pubDate>Sat, 06 Dec 2008 03:26:23 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit time.h, clock() und Zeitmessung im Allgemeinen bei C&#x2F;C++ Code Mischmasch on Sat, 06 Dec 2008 08:17:29 GMT]]></title><description><![CDATA[<p>könnte es sein dass die berechnungen nicht sehr viel zeit brauchen (maximal einige millisekunden) und das deshalb nicht angezeigt wird?!?</p>
<p>und selbst wenn es millisekunden sind wird es durch deine 1000/Clocks... wegegerundet weils ja int werte sind (übrigens ist soweit ich weis clocks per second als 1000 definiert)</p>
<p>lass dir einfach mal t2-t1 ausgeben mehr nicht</p>
<p>wenns immer noch 0 ist denk mal drüber anch ob dein problem überhaupt genug zeit für eine messung braucht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626063</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 06 Dec 2008 08:17:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit time.h, clock() und Zeitmessung im Allgemeinen bei C&#x2F;C++ Code Mischmasch on Sat, 06 Dec 2008 21:58:50 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>könnte es sein dass die berechnungen nicht sehr viel zeit brauchen (maximal einige millisekunden) und das deshalb nicht angezeigt wird?!?</p>
</blockquote>
<p>Nein, das ist ausgeschlossen.</p>
<p>Ich kann bei den Berechnungen ja selbst mitzählen.<br />
Das sind mindestens 25 Sekunden.</p>
<blockquote>
<p>lass dir einfach mal t2-t1 ausgeben mehr nicht</p>
</blockquote>
<p>Hab ich auch schon gemacht, der zeigt immer 0 an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626310</guid><dc:creator><![CDATA[Zeitproblem]]></dc:creator><pubDate>Sat, 06 Dec 2008 21:58:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit time.h, clock() und Zeitmessung im Allgemeinen bei C&#x2F;C++ Code Mischmasch on Sat, 06 Dec 2008 22:17:54 GMT]]></title><description><![CDATA[<blockquote>
<p>On several other implementations, the value returned by clock() also includes the times of any children whose status has been collected via wait(2) (or another wait-type call). Linux does not include the times of waited-for children in the value returned by clock().</p>
</blockquote>
<p>es wäre also wichtig zu wissen, was die funktionen die du da aufrufst tatsächlich machen. forken die einen anderen prozess oder thread und warten darauf, dass er mit der arbeit fertig ist? im falle eines joins oder sleeps oder was weiß ich nicht noch alles konsumiert dein eigentlicher prozess nämlich keine cpu zeit. um die zeit aller kindprozesse oder threads mit einzubeziehen, nimm times() statt clock(). :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626324</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Sat, 06 Dec 2008 22:17:54 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit time.h, clock() und Zeitmessung im Allgemeinen bei C&#x2F;C++ Code Mischmasch on Sun, 07 Dec 2008 06:17:48 GMT]]></title><description><![CDATA[<p>sothis_ schrieb:</p>
<blockquote>
<blockquote>
<p>On several other implementations, the value returned by clock() also includes the times of any children whose status has been collected via wait(2) (or another wait-type call). Linux does not include the times of waited-for children in the value returned by clock().</p>
</blockquote>
<p>es wäre also wichtig zu wissen, was die funktionen die du da aufrufst tatsächlich machen. forken die einen anderen prozess oder thread und warten darauf, dass er mit der arbeit fertig ist? im falle eines joins oder sleeps oder was weiß ich nicht noch alles konsumiert dein eigentlicher prozess nämlich keine cpu zeit. um die zeit aller kindprozesse oder threads mit einzubeziehen, nimm times() statt clock(). :xmas1:</p>
</blockquote>
<p>Ok, also ich würde es mal so sagen.</p>
<p>Interne, innerhalb der eigenen Schleifen des eigenen Programmcodes wird nicht viel berechnet, die meiste Zeit dürfte wohl das Öffnen einer sehr kleinen Textdatei beanspruchen, aber das ist auch nicht viel Zeit.</p>
<p>Die meiste Zeit wird also beim Systemaufruf system(&quot;anderes_programm..&quot;) verbraucht, wobei hier dieses Programm die meiste Zeit benötigt.</p>
<p>Ich weiß jetzt nicht, inwiefern mein C++ Code bei einem Systemaufruf schlafen gelegt wird, aber ich kann zumindest sagen, daß der Systemaufruf in einer<br />
if Abfrage ausgeführt wird, weil ich wissen will, ob das Ergebis erfolgreich war.</p>
<p>Sprich das sieht etwa so aus:</p>
<pre><code>if ( system(&quot;anderes_programm&quot;) == true)
{
  cout &lt;&lt; &quot;Alles ok&quot; &lt;&lt; endl;
  // noch ein paar andere Dinge
}
else
{
  return 1;
}
</code></pre>
<p>D.h. wenn das einen Sleep in meinem Prozess verursacht, dann könnte das wirklich so sein wie du sagst.<br />
Ich denke ich werde mal times() anstatt clock() probieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626364</guid><dc:creator><![CDATA[Zeitproblem]]></dc:creator><pubDate>Sun, 07 Dec 2008 06:17:48 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit time.h, clock() und Zeitmessung im Allgemeinen bei C&#x2F;C++ Code Mischmasch on Sun, 07 Dec 2008 08:11:16 GMT]]></title><description><![CDATA[<p>so sieht's aus. system() forked einen anderen prozess (eben dein anderes programm) und legt den prozess in dem du system() aufrufst solange schlafen bis dieser neue prozess beendet ist. deswegen denkt clock() das nüx passiert ist. in diesem fall hilft also times() auf jeden fall :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626378</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Sun, 07 Dec 2008 08:11:16 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit time.h, clock() und Zeitmessung im Allgemeinen bei C&#x2F;C++ Code Mischmasch on Sun, 07 Dec 2008 16:03:39 GMT]]></title><description><![CDATA[<p>Danke für den Hinweis, ich wäre schon fast verzweifelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626550</guid><dc:creator><![CDATA[Zeitproblem]]></dc:creator><pubDate>Sun, 07 Dec 2008 16:03:39 GMT</pubDate></item></channel></rss>