<?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[[HILFE] globale Variablen und multithreading]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe mir ein paar tutorials angeschaut, aber ich kann das problem nicht lösen. also:</p>
<pre><code>MyBeispiel.cpp

    methode1(){}
    methode2(){}

    methode3(){
        int myCounter;
        for(int i = 0.......){}
        counter = i-1;           
        // counter = counter + i; 
}
</code></pre>
<p>Problem: MyBeispiel.cpp ist keine Klasse sondern nur eine Sammlung von Methoden. Die methode3() läuft mehr als nur einmal, so dass der myCounter bei jedem Durchlauf erneut initialisiert wird (zählt also ab 0 wieder) und der soll sich aber in jedem durchgang die &quot;i&quot; merken und zum letzten wert addieren. Wenn ich eine globale Variable &quot;counter&quot; definieren würde, würde das auch nicht gehen da ich multithreading habe.</p>
<p>Ich entschuldige mich wenn dass für manche zu einfach ist <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/topic/149804/hilfe-globale-variablen-und-multithreading</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 11:20:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/149804.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Jun 2006 15:12:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [HILFE] globale Variablen und multithreading on Fri, 09 Jun 2006 15:12:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe mir ein paar tutorials angeschaut, aber ich kann das problem nicht lösen. also:</p>
<pre><code>MyBeispiel.cpp

    methode1(){}
    methode2(){}

    methode3(){
        int myCounter;
        for(int i = 0.......){}
        counter = i-1;           
        // counter = counter + i; 
}
</code></pre>
<p>Problem: MyBeispiel.cpp ist keine Klasse sondern nur eine Sammlung von Methoden. Die methode3() läuft mehr als nur einmal, so dass der myCounter bei jedem Durchlauf erneut initialisiert wird (zählt also ab 0 wieder) und der soll sich aber in jedem durchgang die &quot;i&quot; merken und zum letzten wert addieren. Wenn ich eine globale Variable &quot;counter&quot; definieren würde, würde das auch nicht gehen da ich multithreading habe.</p>
<p>Ich entschuldige mich wenn dass für manche zu einfach ist <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/1074683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074683</guid><dc:creator><![CDATA[bvlgari]]></dc:creator><pubDate>Fri, 09 Jun 2006 15:12:13 GMT</pubDate></item><item><title><![CDATA[Reply to [HILFE] globale Variablen und multithreading on Fri, 09 Jun 2006 15:41:02 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>übergib den Startwert von i als Parameter. Wenn du das als Referenz machst, kannst du auch den Endewert wieder zurückgeben und so für den nächsten Aufruf zwischenspeichern.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074697</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 09 Jun 2006 15:41:02 GMT</pubDate></item><item><title><![CDATA[Reply to [HILFE] globale Variablen und multithreading on Fri, 09 Jun 2006 15:52:37 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>Hallo</p>
<p>übergib den Startwert von i als Parameter. Wenn du das als Referenz machst, kannst du auch den Endewert wieder zurückgeben und so für den nächsten Aufruf zwischenspeichern.</p>
<p>bis bald<br />
akari</p>
</blockquote>
<p>Wie meinst du das? kannst du das mit einem kleinem beispiel andeuten?</p>
<p>besten dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074704</guid><dc:creator><![CDATA[bvlgari]]></dc:creator><pubDate>Fri, 09 Jun 2006 15:52:37 GMT</pubDate></item><item><title><![CDATA[Reply to [HILFE] globale Variablen und multithreading on Fri, 09 Jun 2006 16:25:58 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>ich meine das so</p>
<pre><code class="language-cpp">int mehtode3(int &amp;counter)
  {
    for(int i = 0.......){...}
    counter += i; 
  }
...

// Benutzung :
int counter = 0;
methode3(counter);
...
methode3(counter);
</code></pre>
<p>Im Grunde wäre dafür eine Wrapper-Klasse gut, die als Member den counter hat.<br />
Dann kannst du in jeder einzelnenInstanz einen einzelnen Counter hochzählen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074711</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 09 Jun 2006 16:25:58 GMT</pubDate></item><item><title><![CDATA[Reply to [HILFE] globale Variablen und multithreading on Sat, 10 Jun 2006 06:34:10 GMT]]></title><description><![CDATA[<p>ich bin mir nicht sicher ob das gehen wird WEIL ich habe mehrere therads, und wenn ich wie von dir vorgeschlagen schreibe</p>
<pre><code>int counter =0
</code></pre>
<p>dann läuft z.b. der erste thread:</p>
<pre><code>int counter =0
for(int i =....}
</code></pre>
<p>und dann kommt der zweite thread, initialisiert mit int counter = 0 wieder auf &quot;0&quot; obwohl der erste thread gar nicht fertig ist <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>du hast die variable int counter global definiert und deswegen wird sich auch von jedem thread überschrieben. eine membervariable kann ich ja auch nicht machen da es sich um keine klasse sondern nur eine ansammlung an der methoden handelt.</p>
<p>danke für deine mühe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074922</guid><dc:creator><![CDATA[bvlgari]]></dc:creator><pubDate>Sat, 10 Jun 2006 06:34:10 GMT</pubDate></item><item><title><![CDATA[Reply to [HILFE] globale Variablen und multithreading on Sat, 10 Jun 2006 07:35:13 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>mir ist immer noch nicht klar ob du nun systemweit (auch über die Threads) nur genau einen Zähler brauchst oder für bestimmte Abläufe jeweils einen Zähler.<br />
Im letzteren Fall ist mein Code genau das richtige.</p>
<p>Im ersteren kannst du es so vereinfachen</p>
<pre><code class="language-cpp">int mehtode3()
{
  static int counter = 0;
  for(int i = 0.......){...}
  counter += i;
  }
</code></pre>
<p>Somit hast du genau einen Counter. Allerdings bist du immer noch selber für die Threadsafety verantwortlich. Stichwort ist <em>Critical Section</em></p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074929</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sat, 10 Jun 2006 07:35:13 GMT</pubDate></item><item><title><![CDATA[Reply to [HILFE] globale Variablen und multithreading on Sat, 10 Jun 2006 07:55:56 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>Hallo<br />
....<br />
akari</p>
</blockquote>
<p>hallo akari,</p>
<p>ich habe mehrere threads und jeder thread bzw. ablauf hat einen eigenen zähler. threads überlappen sich während des ablaufs natürlich und somit verändert (initialisiert) der eine thread den zähler des anderen.</p>
<p>membervariable geht wohl nur in einer class oder? ich meine in einer .cpp bzw. .h wo nur methoden stehen nicht??</p>
<p>danke dir</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074936</guid><dc:creator><![CDATA[bvlgari]]></dc:creator><pubDate>Sat, 10 Jun 2006 07:55:56 GMT</pubDate></item><item><title><![CDATA[Reply to [HILFE] globale Variablen und multithreading on Sat, 10 Jun 2006 08:35:27 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>dann brauchst du grundsätzlich die erste von mir genannte Methode.</p>
<p>Das eigentliche Problem was du hast ist aber nur von Thread-Seite aus zu lösen, du must die methode3 in einer sogenannten Critical Section ausführen, die sicherstellt das die Methode immer nur genau von einem Thread aus aufgerufen wird. Siehe auch Thread synchronisieren.<br />
Wie das genau geht ist von der von dir verwendeten Thread-Implementation abhängig. Threads sind nicht im C++ Standard und plattformabhängig (es gibt natürlich plattformunabhängige Wrapper). Lies dir also die Doku dazu durch.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074950</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sat, 10 Jun 2006 08:35:27 GMT</pubDate></item><item><title><![CDATA[Reply to [HILFE] globale Variablen und multithreading on Sat, 10 Jun 2006 08:51:49 GMT]]></title><description><![CDATA[<p>Wenn jeder Thread genau einen Counter hat, dann gibt es meiner Meinung nach zwei grundlegende Methoden.</p>
<p>1. Du legst in jedem Thread einen counter irgendwo an und führst den immer mit, so dass die Methode den counter übergeben bekommt. Die Methode sieht dann so aus, wie es akari beschrieben hat.</p>
<p>2. Du legst den counter als Thread Specific Data an und holst dir innerhalb von Methode immer den zugehörigen counter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074961</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Sat, 10 Jun 2006 08:51:49 GMT</pubDate></item><item><title><![CDATA[Reply to [HILFE] globale Variablen und multithreading on Mon, 12 Jun 2006 15:23:19 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>Hallo</p>
<p>dann brauchst du grundsätzlich die erste von mir genannte Methode.<br />
.................</p>
<p>bis bald<br />
akari</p>
</blockquote>
<p>hallo akari,</p>
<p>dein vorschlag hat mir am anfang sehr geholfen-alles klappte. aber als ich danach noch etwas testen wollte... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>also, ich arbeite mit einem pipeliner. dieser pipeliner.exe schaut in bestimmten dateiverzeichnissen nach neu abgelegten dateien und verarbeitet diese gleich, um aus diesen dateien (ascii) attribute rauszufischen.</p>
<p>1. wenn sich z.b. 3 dateien in so einem verzeichnis befinden und ich den pipeliner starte - funktioniert deine methode perfect - pipeliner erzeugt 3 threads und jedes thread hat einen eigenen counter.</p>
<p>2. wenn ich aber, während der pipeliner im hintegrund auf neue dateien wartet, ihm einzeln solche archiv-dateien ins verzeichnis ablege, nimmt er diese, aber der counter wird nicht dann mit &quot;0&quot; initialisiert sondern er zählt weiter wo er bei den ersten dateien aufgehört hat, weiter.</p>
<p>ich will wirklich alles versuchen bevor ich auf das beschiessene ein-thread system zurückgreife.</p>
<p>besten dank</p>
<p>vedran</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076323</guid><dc:creator><![CDATA[bvlgari]]></dc:creator><pubDate>Mon, 12 Jun 2006 15:23:19 GMT</pubDate></item></channel></rss>