<?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[Pause in for-Schleife]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich hab eine for-Schleife, die man mit einem Klick auf nen &quot;Pause&quot;-Button unterbrechen können soll. Wenn wieder auf &quot;Pause&quot; geklickt wird, soll die Schleife da weiterlaufen, wo sie unterbrochen wurde. Ich hab das Problem so gelöst:</p>
<pre><code class="language-cpp">for(;i&lt;=Form1-&gt;n; i++)
 {
  Application-&gt;ProcessMessages();
  if(!Form1-&gt;SpeedButton1-&gt;Down)   //&quot;Pause&quot; gedrückt?
  {
       //for-Schleife
  }
  else i--;
 }
</code></pre>
<p>Nur bleibt die CPU-Auslastung auch bei &quot;Pause&quot; bei annähernd 100%, so wie wenn er die Anweisungen in der Schleife ausführt.</p>
<p>Kann man des noch irgendwie anders machen?</p>
<p>-kaljinka-</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/98477/pause-in-for-schleife</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 04:09:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/98477.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Jan 2005 20:19:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pause in for-Schleife on Wed, 19 Jan 2005 20:19:07 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich hab eine for-Schleife, die man mit einem Klick auf nen &quot;Pause&quot;-Button unterbrechen können soll. Wenn wieder auf &quot;Pause&quot; geklickt wird, soll die Schleife da weiterlaufen, wo sie unterbrochen wurde. Ich hab das Problem so gelöst:</p>
<pre><code class="language-cpp">for(;i&lt;=Form1-&gt;n; i++)
 {
  Application-&gt;ProcessMessages();
  if(!Form1-&gt;SpeedButton1-&gt;Down)   //&quot;Pause&quot; gedrückt?
  {
       //for-Schleife
  }
  else i--;
 }
</code></pre>
<p>Nur bleibt die CPU-Auslastung auch bei &quot;Pause&quot; bei annähernd 100%, so wie wenn er die Anweisungen in der Schleife ausführt.</p>
<p>Kann man des noch irgendwie anders machen?</p>
<p>-kaljinka-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/700739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/700739</guid><dc:creator><![CDATA[Kaljinka]]></dc:creator><pubDate>Wed, 19 Jan 2005 20:19:07 GMT</pubDate></item><item><title><![CDATA[Reply to Pause in for-Schleife on Wed, 19 Jan 2005 20:32:28 GMT]]></title><description><![CDATA[<p>Guck mal in die FAQ, da müsset AFAIK ein Beitrag zu vorhanden sein. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/700753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/700753</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Wed, 19 Jan 2005 20:32:28 GMT</pubDate></item><item><title><![CDATA[Reply to Pause in for-Schleife on Wed, 19 Jan 2005 21:21:34 GMT]]></title><description><![CDATA[<p>Die Anweisung in der Bedingung wird zwar übersprungen, die (Endlos)Schleife selbst wird aber weiter durchlaufen. Deshalb bleibt auch die CPU-Auslastung oben.</p>
<p>Der vernünftigste Weg ist, die Schleife in einen eigenen Thread auszulagern. Dort kannst du dann Sleep verwenden, ohne die eigentliche Anwendung einzufrieren.</p>
<p>Alternativ könntest evtl. du die for-Schleife in eine eigene Funktion packen, der du Start- und Maximalwert als Parameter übergibst.<br />
In der for-Schleife fragst du wieder deine Bedingung ab. Wenn true (Pause) dann beendest die Schleife und gibst den aktuellen Stand der Zählvariable zurück. Den Wert speicherst du irgendwo ab und übergibst ihn beim nächsten Aufruf der Funktion (UnPause) als neuen Startwert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/700813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/700813</guid><dc:creator><![CDATA[Jansen]]></dc:creator><pubDate>Wed, 19 Jan 2005 21:21:34 GMT</pubDate></item><item><title><![CDATA[Reply to Pause in for-Schleife on Wed, 19 Jan 2005 21:47:36 GMT]]></title><description><![CDATA[<p>Application-&gt;ProcessMessages(); in der Hauptschleife könnte da weiterhelfen, was die Auslastung der CPU angeht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/700826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/700826</guid><dc:creator><![CDATA[Windoof]]></dc:creator><pubDate>Wed, 19 Jan 2005 21:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to Pause in for-Schleife on Wed, 19 Jan 2005 22:48:49 GMT]]></title><description><![CDATA[<p>Danke erstmal! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Ich denk, ich werd morgen mal versuchen, daraus ne eigene Funktion zu machen. Mit Threads hab ich bisher noch nie was gemacht und ich steh leider 'n bisschen unter Zeitdruck.</p>
<p>-kaljinka-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/700868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/700868</guid><dc:creator><![CDATA[Kaljinka]]></dc:creator><pubDate>Wed, 19 Jan 2005 22:48:49 GMT</pubDate></item><item><title><![CDATA[Reply to Pause in for-Schleife on Thu, 20 Jan 2005 17:43:34 GMT]]></title><description><![CDATA[<p>Nochmal zum Abspeichern der Zählvariablen... wenn ich die zwischenspeichern möchte, muss ich die Variable dafür notgedrungen global definieren, sonst ist sie nach Beenden der Speicher-Funktion ja wieder weg.</p>
<p>Spricht eigentlich irgendwas dagegen, die Zählvariable selbst gleich global zu definieren? Dann müsst ich sie gar nicht zwischenspeichern.</p>
<p>-kaljinka-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/701676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/701676</guid><dc:creator><![CDATA[Kaljinka]]></dc:creator><pubDate>Thu, 20 Jan 2005 17:43:34 GMT</pubDate></item><item><title><![CDATA[Reply to Pause in for-Schleife on Thu, 20 Jan 2005 17:46:03 GMT]]></title><description><![CDATA[<p>Du musst nichts global machen. Geht auch mit Parameter (Referenzübergabe) oder Funktionsrückgabewert.<br />
Globale Variablen sollte man immer vermeiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/701678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/701678</guid><dc:creator><![CDATA[HEZ]]></dc:creator><pubDate>Thu, 20 Jan 2005 17:46:03 GMT</pubDate></item><item><title><![CDATA[Reply to Pause in for-Schleife on Thu, 20 Jan 2005 18:08:17 GMT]]></title><description><![CDATA[<p>HEZ schrieb:</p>
<blockquote>
<p>Globale Variablen sollte man immer vermeiden.</p>
</blockquote>
<p>Warum? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Wie geht das mit Parametern? Ich muss ja warten, bis der Benutzer die Pause wieder aufhebt. Wo soll ich da den Wert zwischenspeichern wenn nicht global?</p>
<p>-kaljinka-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/701705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/701705</guid><dc:creator><![CDATA[Kaljinka]]></dc:creator><pubDate>Thu, 20 Jan 2005 18:08:17 GMT</pubDate></item><item><title><![CDATA[Reply to Pause in for-Schleife on Thu, 20 Jan 2005 18:46:54 GMT]]></title><description><![CDATA[<p>Nun, du hast doch gesagt, du würdest irgendwas in eine Funktion auslagern...<br />
aber gut, da du was von Zeitdruck gesagt hast, mach doch erst mal deine globale Variable. Jetzt muss es erst mal funktionieren. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/701744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/701744</guid><dc:creator><![CDATA[HEZ]]></dc:creator><pubDate>Thu, 20 Jan 2005 18:46:54 GMT</pubDate></item><item><title><![CDATA[Reply to Pause in for-Schleife on Thu, 20 Jan 2005 23:54:50 GMT]]></title><description><![CDATA[<p>Mir is jetzt was eingefallen. Nachdem ich die Werte für die Laufvariable sowieso ständig in einem Label ausgib, kann ich doch einfach wenn die Pause aufgehoben wird diesen Wert auslesen und wieder in nen Integer verwandeln und meine Funktion aufrufen.</p>
<p>Oder sollt ich das lieber nicht machen? Is des ein ganz schlechter Programmierstil?</p>
<p>Hier mal ein Teil vom Code:<br />
(es geht darum, die Kreiszahl pi stochastisch zu bestimmen)</p>
<pre><code class="language-cpp">void dart_pi(unsigned long int k, unsigned long int i)
{               //liefert die pi-Näherungen ab dem i-ten Wurf
 double x, y;                          //Koordinaten der Pfeile
 double curr_pi;                       //aktuelle pi-Näherung
 const double factor = 1.0/RAND_MAX;
 for(;i&lt;=Form1-&gt;n; i++)
 {
  Application-&gt;ProcessMessages();
  x = rand()*factor;
  y = rand()*factor;
  Form1-&gt;DrawCross(x, y);
  if(x*x + y*y &lt; 1.0) k++;
  curr_pi = 4.0*k/i;
  Form1-&gt;updateForm(x, y, curr_pi, k, i);
  if(Form1-&gt;pause)
  {
   if(Form1-&gt;cancel)
   {
    Form1-&gt;setDefault();
    Form1-&gt;SpeedButton1-&gt;Down = false;
    return;
   }
   return;
  }
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{                                //Pause
 if(SpeedButton1-&gt;Down) pause = true;
 else
 {
  pause = false;
  dart_pi(StrToInt64(Label7-&gt;Caption), StrToInt64(Label9-&gt;Caption));
 }
}
</code></pre>
<p>Und wenn wir schon dabei sind, reicht es, wenn ich randomize() einmal ganz am Anfang, direkt im ButtonClick, aufruf?</p>
<p>-kaljinka-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/701993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/701993</guid><dc:creator><![CDATA[Kaljinka]]></dc:creator><pubDate>Thu, 20 Jan 2005 23:54:50 GMT</pubDate></item><item><title><![CDATA[Reply to Pause in for-Schleife on Fri, 21 Jan 2005 08:54:53 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>Nachdem ich die Werte für die Laufvariable sowieso ständig in einem Label ausgib, kann ich doch einfach wenn die Pause aufgehoben wird diesen Wert auslesen und wieder in nen Integer verwandeln und meine Funktion aufrufen.</p>
<p>Oder sollt ich das lieber nicht machen? Is des ein ganz schlechter Programmierstil?</p>
</blockquote>
<p>Wenn du sicherstellst, das in dem Label während des Ablaufes nichts anderes steht, ist es eine gute Lösung. Natürlich benötigt eine Konvertierung von und nach AnsiString immer etwas Rechenleistung, es ist also nicht die effektivste.</p>
<blockquote>
<p>Und wenn wir schon dabei sind, reicht es, wenn ich randomize() einmal ganz am Anfang, direkt im ButtonClick, aufruf?</p>
</blockquote>
<p>randomize() sollte einmal beim Programmstart aufgerufen werden, also im Konstruktor des MainForms.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/702112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/702112</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 21 Jan 2005 08:54:53 GMT</pubDate></item><item><title><![CDATA[Reply to Pause in for-Schleife on Fri, 21 Jan 2005 18:51:09 GMT]]></title><description><![CDATA[<p>Okay, vielen Dank! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>-kaljinka-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/702732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/702732</guid><dc:creator><![CDATA[Kaljinka]]></dc:creator><pubDate>Fri, 21 Jan 2005 18:51:09 GMT</pubDate></item></channel></rss>