<?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[Globale Variablen bei großen Programmen]]></title><description><![CDATA[<p>Ich habe einen Code für ein Programm bekommen wo ein langer Job über das setzten einer globalen Variable (Typ: bool) vorzeitig abgebrochen werden kann. Der Job ist in einem anderen Thread ausgelagert.</p>
<p>In allen Programmbestandteilen ist die globale Variable bekannt. Beim betätigen der ESC-Taste oder einem Button wird die Variable auch gesetzt und in anderen parallel laufenden Funktionen ist sie ebenfalls richtig geändert. Der Thread läuft danach jedoch meist munter weiter. Manchmal hält er etwas später an und manchmal aber auch nicht.</p>
<pre><code class="language-cpp">...
for (...) {
  if (bAbortJob) { 
    ... 
    return;
  } 
  ...
}
...
</code></pre>
<p>Woran kann das liegen. Hatte jemand schon mal ein ähnliches Problem? Kann es sein, das die CPU die globale Variable nicht aus dem Speicher neu läd, sondern nur die aus dem Cache benutzt (die falsche)? Diese Methode läuft in anderen Programmen tadellos. Warum der Thread meist nach einiger Zeit doch abbricht kann ich mir nicht wirklich erklären.</p>
<p>Gruß<br />
Trooper</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271923/globale-variablen-bei-großen-programmen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 03:32:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271923.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 06 Aug 2010 10:04:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 10:04:21 GMT]]></title><description><![CDATA[<p>Ich habe einen Code für ein Programm bekommen wo ein langer Job über das setzten einer globalen Variable (Typ: bool) vorzeitig abgebrochen werden kann. Der Job ist in einem anderen Thread ausgelagert.</p>
<p>In allen Programmbestandteilen ist die globale Variable bekannt. Beim betätigen der ESC-Taste oder einem Button wird die Variable auch gesetzt und in anderen parallel laufenden Funktionen ist sie ebenfalls richtig geändert. Der Thread läuft danach jedoch meist munter weiter. Manchmal hält er etwas später an und manchmal aber auch nicht.</p>
<pre><code class="language-cpp">...
for (...) {
  if (bAbortJob) { 
    ... 
    return;
  } 
  ...
}
...
</code></pre>
<p>Woran kann das liegen. Hatte jemand schon mal ein ähnliches Problem? Kann es sein, das die CPU die globale Variable nicht aus dem Speicher neu läd, sondern nur die aus dem Cache benutzt (die falsche)? Diese Methode läuft in anderen Programmen tadellos. Warum der Thread meist nach einiger Zeit doch abbricht kann ich mir nicht wirklich erklären.</p>
<p>Gruß<br />
Trooper</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936999</guid><dc:creator><![CDATA[trooper]]></dc:creator><pubDate>Fri, 06 Aug 2010 10:04:21 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 10:15:58 GMT]]></title><description><![CDATA[<p>Globale Variablen haben den Nachteil, dass von überall darauf zugegriffen werden kann. Es kann sein, dass die Variable nach dem Setzen naschließend irgendwo wieder zurückgesetzt wird bevor der Thread sie in seiner if()-Anweisung abfragt.</p>
<p>Andererseits ist es davon abhängig was der Thread alles in einem Durchgang in der for-Schleife macht. Dann kann es etwas dauern, bis die if()-Abfrage wieder im nächsten Durchlauf dran kommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937005</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Fri, 06 Aug 2010 10:15:58 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 10:13:51 GMT]]></title><description><![CDATA[<p>Eine banale Erklärung wäre:</p>
<pre><code class="language-cpp">...
for (...) {
  if (bAbortJob) {
    ...
    return;
  }
  ... // &lt;-- laaangsamer Codeabschnitt
}
...
</code></pre>
<p>Wenn die Ausführung grade in dem langsamen Codeabschnitt ist, kann es unter Umständen sehr lange dauern, bis die Variable wieder geprüft wird.</p>
<p>Sollte das nicht so sein, muss die Variable wohl doch irgendwo nicht richtig gesetzt worden sein bzw. wiedr zurückgesetzt. Dummerweise ist das ja gerade das Problem bei globalen Variablen, dass man sich nie sicher sein kann, wo diese nicht eventuell doch irgendwo falsch gesetzt werden.<br />
Dass der alte Wert aus dem Cache falsch geladen wird, ist eigentlich auszuschließen, dann kannst du denk ich von einem Compilerbug ausgehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937006</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Fri, 06 Aug 2010 10:13:51 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 10:21:47 GMT]]></title><description><![CDATA[<p>Um das Problem der globalen Variable zu umgehen, wäre es sinnvoll ein Event-Handler in den Thread einzubauen. Dem Thread wird dann ein Abbruch-Event übergeben (bzw. der Thread erzeugt selber ein Event und gibt dieses an den Aufrufer zurück).</p>
<p>Wird dieses Event &quot;gesetzt&quot;, dann bricht der Thread ab.</p>
<p>Aber wenn der Thread irgendwo innerhalb der for-Schleife beschäftigt ist, kann es eben dauern, bis das nächste mal die Abfrage nach dem Abbruch-Event durchgeführt wird. Man könnte dann zwischen den einzelnen Arbeitschritten (wenn es mehrere sind) immer wieder das Event (oder die Variable) abfragen, um auch zwischendurch abzubrechen (wenn möglich/sinnvoll).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937011</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Fri, 06 Aug 2010 10:21:47 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 10:30:57 GMT]]></title><description><![CDATA[<p>ipsec schrieb:</p>
<blockquote>
<p>Dass der alte Wert aus dem Cache falsch geladen wird, ist eigentlich auszuschließen, dann kannst du denk ich von einem Compilerbug ausgehen.</p>
</blockquote>
<p>Zur Sicherheit kannste sie noch <code>volatile</code> machen. Damit sagst Du dem Compiler explizit, daß sie von anderen Threads aus geändert werden darf und der seine optimierenden Griffel davon fern halten soll.<br />
Events sind gar nicht nötig, hier finde ich sie sogar unangebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937015</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 06 Aug 2010 10:30:57 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 10:34:04 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Events sind gar nicht nötig, hier finde ich sie sogar unangebracht.</p>
</blockquote>
<p>Würdest Du (auch bei mehreren Threads?) mit globalen Abbruch-Variablen arbeiten? Oder welche Methode schlägst Du vor?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937019</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Fri, 06 Aug 2010 10:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 10:35:11 GMT]]></title><description><![CDATA[<p>Wenn die Variable ohne irgendeinen Synchronisationsmechanismus einfach nur so gesetzt wird, tritt genau der von dir beschriebene Effekt auf.</p>
<p>Lösungen wären:<br />
Mutex<br />
boost::atomic<br />
ein von deiner Compilerimplementierung vorgesehener Mechanismus</p>
<p>Keine Lösung ist volatile, es sei denn, dein Compiler will das explizit so.</p>
<p>Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937020</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 06 Aug 2010 10:35:11 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 10:46:58 GMT]]></title><description><![CDATA[<p>Roger Wilco schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>Events sind gar nicht nötig, hier finde ich sie sogar unangebracht.</p>
</blockquote>
<p>Würdest Du (auch bei mehreren Threads?) mit globalen Abbruch-Variablen arbeiten? Oder welche Methode schlägst Du vor?</p>
</blockquote>
<p>Wenn sie nur rechnen würden, ja.<br />
Tun sie aber nie. Da sie für den Benutzer Sleep oder recv oder sowas drin haben, oder von einer Pipe daten holen oder sonstwie halt gerne warten und die Variablenänderung nicht sehen würden, tue ich das Event mit in die Objekte von WaitForMultipleObjects oder select.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937027</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 06 Aug 2010 10:46:58 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 10:52:17 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Events sind gar nicht nötig, hier finde ich sie sogar unangebracht.</p>
</blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>..., tue ich das Event mit in die Objekte von WaitForMultipleObjects oder select.</p>
</blockquote>
<p>Huch?! <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>Also doch Events...?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937030</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Fri, 06 Aug 2010 10:52:17 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 10:55:47 GMT]]></title><description><![CDATA[<p>Roger Wilco schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>Events sind gar nicht nötig, hier finde ich sie sogar unangebracht.</p>
</blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>..., tue ich das Event mit in die Objekte von WaitForMultipleObjects oder select.</p>
</blockquote>
<p>Huch?! <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>Also doch Events...?!</p>
</blockquote>
<p>Aber nicht wie bei Dir als Variable zweckentfremdet.</p>
<blockquote>
<p>kann es eben dauern, bis das nächste mal die Abfrage nach dem Abbruch-Event durchgeführt wird</p>
</blockquote>
<p>Wenn Du so programmieren willst, dann sind Events unangebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937034</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 06 Aug 2010 10:55:47 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 10:56:34 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Wenn die Variable ohne irgendeinen Synchronisationsmechanismus einfach nur so gesetzt wird, tritt genau der von dir beschriebene Effekt auf.</p>
<p>Lösungen wären:<br />
Mutex<br />
boost::atomic<br />
ein von deiner Compilerimplementierung vorgesehener Mechanismus</p>
<p>Keine Lösung ist volatile, es sei denn, dein Compiler will das explizit so.</p>
<p>Lars</p>
</blockquote>
<p>Sag mir einen Compiler, der es nicht so will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937036</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 06 Aug 2010 10:56:34 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 11:04:26 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Roger Wilco schrieb:</p>
<blockquote>
<p>Also doch Events...?!</p>
</blockquote>
<p>Aber nicht wie bei Dir als Variable zweckentfremdet.</p>
<blockquote>
<p>kann es eben dauern, bis das nächste mal die Abfrage nach dem Abbruch-Event durchgeführt wird</p>
</blockquote>
<p>Wenn Du so programmieren willst, dann sind Events unangebracht.</p>
</blockquote>
<p>Warum als Variable zweckentfremdet? Ich würde das Event setzten, wenn der Thread abbrechen soll und sobald der Thread das Event durch WaitFor... &quot;abfragt&quot;, dann bricht der Thread eben ab.</p>
<p>Haben wir uns falsch verstanden, oder mache ich etwas grundsätzliches verkehrt? <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><strong>Edit:</strong> Du meinst, wenn der Thread eh ein Event-Handler (z.B. WaitFor...) besitzt, dann würdest Du mit einem Abbruch_Event arbeiten und wenn es nur eine stupide while()/for()-Schleife ist, dann mit einer globalen Abbruch-Variable?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937039</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Fri, 06 Aug 2010 11:04:26 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 11:10:28 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Wenn die Variable ohne irgendeinen Synchronisationsmechanismus einfach nur so gesetzt wird, tritt genau der von dir beschriebene Effekt auf.</p>
<p>Lösungen wären:<br />
Mutex<br />
boost::atomic<br />
ein von deiner Compilerimplementierung vorgesehener Mechanismus</p>
<p>Keine Lösung ist volatile, es sei denn, dein Compiler will das explizit so.</p>
<p>Lars</p>
</blockquote>
<p>Sag mir einen Compiler, der es nicht so will.</p>
</blockquote>
<p>gcc, VisualStudio</p>
<p>Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937044</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 06 Aug 2010 11:10:28 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 11:17:06 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Wenn die Variable ohne irgendeinen Synchronisationsmechanismus einfach nur so gesetzt wird, tritt genau der von dir beschriebene Effekt auf.</p>
<p>Lösungen wären:<br />
Mutex<br />
boost::atomic<br />
ein von deiner Compilerimplementierung vorgesehener Mechanismus</p>
<p>Keine Lösung ist volatile, es sei denn, dein Compiler will das explizit so.</p>
<p>Lars</p>
</blockquote>
<p>Sag mir einen Compiler, der es nicht so will.</p>
</blockquote>
<p>gcc, VisualStudio</p>
<p>Lars</p>
</blockquote>
<p>Früher hab ich globale Variablen so verwendet (viel mit MSVC) und es funktionierte. Was passiert schlimmstenfalls genau, wenn der Compiler so ist, wie Du sagst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937053</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 06 Aug 2010 11:17:06 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 11:22:29 GMT]]></title><description><![CDATA[<p>Vielen Dank für eure Antworten erstmal.</p>
<p>&quot;...grade in dem langsamen Codeabschnitt ist...&quot;<br />
Das habe ich überprüft und ist nicht der Fall.</p>
<p>&quot;...irgendwo wieder zurückgesetzt...&quot;<br />
Die Variable wird nirgendwo sonst zurückgesetzt/verändert.</p>
<p>&quot;...volatile...&quot;<br />
Hatte ich auch bereits probiert - brachte nix.</p>
<p>@manni66<br />
&quot;Wenn die Variable ohne irgendeinen Synchronisationsmechanismus einfach nur so gesetzt wird, tritt genau der von dir beschriebene Effekt auf.&quot;<br />
Und Warum?</p>
<p>Also gelöst ist das Problem noch immer nicht und ich verstehe nicht weshalb.</p>
<p>Gruß<br />
Trooper</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937054</guid><dc:creator><![CDATA[trooper]]></dc:creator><pubDate>Fri, 06 Aug 2010 11:22:29 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 11:25:02 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Wenn die Variable ohne irgendeinen Synchronisationsmechanismus einfach nur so gesetzt wird, tritt genau der von dir beschriebene Effekt auf.</p>
<p>Lösungen wären:<br />
Mutex<br />
boost::atomic<br />
ein von deiner Compilerimplementierung vorgesehener Mechanismus</p>
<p>Keine Lösung ist volatile, es sei denn, dein Compiler will das explizit so.</p>
<p>Lars</p>
</blockquote>
<p>Sag mir einen Compiler, der es nicht so will.</p>
</blockquote>
<p>gcc, VisualStudio</p>
<p>Lars</p>
</blockquote>
<p>Früher hab ich globale Variablen so verwendet (viel mit MSVC) und es funktionierte. Was passiert schlimmstenfalls genau, wenn der Compiler so ist, wie Du sagst?</p>
</blockquote>
<ol>
<li>es funktioniert nicht (zuverlässig), oder schlimmer, auf Rechner A (deiner) ja, auf B (Kunde) nein</li>
<li>da der Compiler die Zugriffe nicht optimiert, sind sie langsamer (ist im im vorliegenden Code wohl unerheblich)</li>
</ol>
<p>Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937056</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 06 Aug 2010 11:25:02 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 11:34:20 GMT]]></title><description><![CDATA[<p>trooper schrieb:</p>
<blockquote>
<p>@manni66<br />
&quot;Wenn die Variable ohne irgendeinen Synchronisationsmechanismus einfach nur so gesetzt wird, tritt genau der von dir beschriebene Effekt auf.&quot;<br />
Und Warum?</p>
</blockquote>
<p>Weil die verschiedenen Prozessorkerne bei Multicore-Architekturen jeweils eine eigene Kopie der Variablen benutzen, und über die Änderung in einem anderen Kern nicht informiert werden.</p>
<p>Siehe auch: Programming with POSIX Threads, David R. Butenhof<br />
oder die Seite von Herb Sutter (<a href="http://www.gotw.ca/" rel="nofollow">http://www.gotw.ca/</a>)</p>
<p>Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937059</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 06 Aug 2010 11:34:20 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 11:44:06 GMT]]></title><description><![CDATA[<p>Und der Thread endet nach längerer Zeit dann nur, weil der Thread immer wieder mal vom BS auf einen anderen Kern gelegt wird und irgendwann zufällig mal auf dem Kern landet, der die Änderung kennt?</p>
<p>Der da <a href="http://www.shafqatahmed.com/2008/01/multi-core-cach.html" rel="nofollow">http://www.shafqatahmed.com/2008/01/multi-core-cach.html</a> sagt, daß das auf x86 und x64 kein Problem wäre.</p>
<p>Na, wie gut, daß wie trooper zum Ausprobieren bhaben.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24826">@trooper</a>: Wie willste deine atomics haben? Boost, linux oder WinAPI?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937062</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 06 Aug 2010 11:44:06 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 11:46:36 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>oder die Seite von Herb Sutter (<a href="http://www.gotw.ca/" rel="nofollow">http://www.gotw.ca/</a>)</p>
</blockquote>
<p>Solche nicht nachvollziehbaren Links kannste Dir auch sparen. Die belegen gar nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937065</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 06 Aug 2010 11:46:36 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 11:51:27 GMT]]></title><description><![CDATA[<p>Es ist x86 unter Windows.</p>
<p>Und es klappt jetzt nur verstehe ich nicht ganz warum.<br />
Ich rufe eine externe Funktion auf, die als Rückgabewert diese ominöse globale Variable hat.</p>
<pre><code class="language-cpp">for (...) {
  if (isAborted()) {
    return;
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1937068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937068</guid><dc:creator><![CDATA[trooper]]></dc:creator><pubDate>Fri, 06 Aug 2010 11:51:27 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 11:51:44 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>oder die Seite von Herb Sutter (<a href="http://www.gotw.ca/" rel="nofollow">http://www.gotw.ca/</a>)</p>
</blockquote>
<p>Solche nicht nachvollziehbaren Links kannste Dir auch sparen. Die belegen gar nichts.</p>
</blockquote>
<p>Wenn du meinst ...</p>
<p>Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937069</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 06 Aug 2010 11:51:44 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 12:27:36 GMT]]></title><description><![CDATA[<p>trooper schrieb:</p>
<blockquote>
<p>Es ist x86 unter Windows.</p>
<p>Und es klappt jetzt nur verstehe ich nicht ganz warum.<br />
Ich rufe eine externe Funktion auf, die als Rückgabewert diese ominöse globale Variable hat.</p>
<pre><code class="language-cpp">for (...) {
  if (isAborted()) {
    return;
  }
}
</code></pre>
</blockquote>
<p>Hast Du zufällig eine lokale Variable isAborted oder ein Attribut isAborted hier oder der Basisklasse angelegt?<br />
Um nochmal auf die cache-Therie zu kommen, würde ein anderer Funktionsaufruf, sagen wir mal</p>
<pre><code class="language-cpp">cout&lt;&lt;&quot;&quot;;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">CloseHandle(INVALID_HANDLE_VALUE);
</code></pre>
<p>vor dem if es auch reparieren?</p>
<p>Die passenden atomics wären glaube ich</p>
<pre><code class="language-cpp">LONG isAborted=0;//bool isAborted=false;
InterlockedOr(&amp;isAborted,1);//isAborted=true;
if(InterlockedOr(&amp;isAborted,0));//if(isAborted)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1937080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937080</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 06 Aug 2010 12:27:36 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 12:32:01 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>oder die Seite von Herb Sutter (<a href="http://www.gotw.ca/" rel="nofollow">http://www.gotw.ca/</a>)</p>
</blockquote>
<p>Solche nicht nachvollziehbaren Links kannste Dir auch sparen. Die belegen gar nichts.</p>
</blockquote>
<p>Wenn du meinst ...<br />
Lars</p>
</blockquote>
<p>Nicht wegen Sutters Glaubwürdigkeit, sondern weil Du nicht die konkrete Unterseite nennst. Der schreibt nämlich viel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937087</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 06 Aug 2010 12:32:01 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 12:42:16 GMT]]></title><description><![CDATA[<p>So hundert Prozent verstanden habe ich dich jetzt glaube ich nicht.<br />
isAborted ist jetzt eine Funktion, welche als Rückgabe die globale Variable hat.</p>
<pre><code class="language-cpp">bool isAborted(void) {
  return bAbortJob;
}
</code></pre>
<p>Es gibt keine andere lokale Variable bzw. Funktion, welche genauso heißt.<br />
Im Algorithmus werden andere Funktionen aufgerufen (die Progressbar aktualisiert etc.). Ein <strong>cout&lt;&quot;&quot;</strong> ändert da nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937094</guid><dc:creator><![CDATA[trooper]]></dc:creator><pubDate>Fri, 06 Aug 2010 12:42:16 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 12:54:41 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>oder die Seite von Herb Sutter (<a href="http://www.gotw.ca/" rel="nofollow">http://www.gotw.ca/</a>)</p>
</blockquote>
<p>Solche nicht nachvollziehbaren Links kannste Dir auch sparen. Die belegen gar nichts.</p>
</blockquote>
<p>Wenn du meinst ...<br />
Lars</p>
</blockquote>
<p>Nicht wegen Sutters Glaubwürdigkeit, sondern weil Du nicht die konkrete Unterseite nennst. Der schreibt nämlich viel.</p>
</blockquote>
<p>Ja, und das sollte man in Bezug auf Threads auch (fast) alles lesen. Mit Threads schießt man sich sonst sehr schnell ins eigene Knie. Ist halt alles nicht so einfach ...</p>
<p>Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937101</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 06 Aug 2010 12:54:41 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Variablen bei großen Programmen on Fri, 06 Aug 2010 13:21:19 GMT]]></title><description><![CDATA[<p>Ist im Standard nicht festgelegt, was volatile macht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937112</guid><dc:creator><![CDATA[canthecan]]></dc:creator><pubDate>Fri, 06 Aug 2010 13:21:19 GMT</pubDate></item></channel></rss>