<?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[Schnelle Interthreadkommunikation]]></title><description><![CDATA[<p>Hallo @all,</p>
<p>ich habe folgendes Perfomance Problem:</p>
<p>Ich habe eine Funktion/Algorithmus, die für ihre Arbeit rund 11 Sekunden benötigt.<br />
Da diese Funktion später in einem thread abgearbeitet wird, habe ich zusätzlich 2 Parameter hinzugefügt ( ein std::atomic&lt;bool&gt;&amp; und ein std::atomic&lt;unsigned short&gt;&amp; ).<br />
- Ist die bool-Variable true, soll der Algorithmus abbrechen.<br />
- In die ushort Variable soll der przentuale Fortschritt geschrieben werden (0%, 10% 100% )</p>
<p>Jetzt zum eigentlichen Problem: Füge ich diese Parameter hinzu und schreibe/lese diese in meinem thread, erhöht sich die benötigte Zeit auf 17sek! d.h. C++ benötigt 6 sek! für ein bisschen kommunikation?!?<br />
Ich habe selbiges mit std::mutex probiert, erzeugt aber langsameren Code...</p>
<p>Die Frage ist nun gibt es eine bessere Methode, solche Kommunikationen zu lösen?</p>
<p>Die Variante mit &quot;normalen&quot; Variablen habe ich bereits durchdacht, scheint mir aber zu unsicher zu sein (ich mein, dafür ist atomic schließlich da^^)</p>
<pre><code>// Der Thread Ausschnitt:
// ...
if( abbrechen)
    BrichAlgoAb();

// ...

fortschritt = CalcFortschrittInProzent();

//...

// Main:

// ...

while( 1 )
{
    std::cout &lt;&lt; fortschritt &lt;&lt; std::endl;
    std::this_thread::sleep_for( std::chrono::milliseconds( 100 );
}

// ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/327586/schnelle-interthreadkommunikation</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 14:30:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327586.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Aug 2014 15:39:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Schnelle Interthreadkommunikation on Wed, 20 Aug 2014 15:39:00 GMT]]></title><description><![CDATA[<p>Hallo @all,</p>
<p>ich habe folgendes Perfomance Problem:</p>
<p>Ich habe eine Funktion/Algorithmus, die für ihre Arbeit rund 11 Sekunden benötigt.<br />
Da diese Funktion später in einem thread abgearbeitet wird, habe ich zusätzlich 2 Parameter hinzugefügt ( ein std::atomic&lt;bool&gt;&amp; und ein std::atomic&lt;unsigned short&gt;&amp; ).<br />
- Ist die bool-Variable true, soll der Algorithmus abbrechen.<br />
- In die ushort Variable soll der przentuale Fortschritt geschrieben werden (0%, 10% 100% )</p>
<p>Jetzt zum eigentlichen Problem: Füge ich diese Parameter hinzu und schreibe/lese diese in meinem thread, erhöht sich die benötigte Zeit auf 17sek! d.h. C++ benötigt 6 sek! für ein bisschen kommunikation?!?<br />
Ich habe selbiges mit std::mutex probiert, erzeugt aber langsameren Code...</p>
<p>Die Frage ist nun gibt es eine bessere Methode, solche Kommunikationen zu lösen?</p>
<p>Die Variante mit &quot;normalen&quot; Variablen habe ich bereits durchdacht, scheint mir aber zu unsicher zu sein (ich mein, dafür ist atomic schließlich da^^)</p>
<pre><code>// Der Thread Ausschnitt:
// ...
if( abbrechen)
    BrichAlgoAb();

// ...

fortschritt = CalcFortschrittInProzent();

//...

// Main:

// ...

while( 1 )
{
    std::cout &lt;&lt; fortschritt &lt;&lt; std::endl;
    std::this_thread::sleep_for( std::chrono::milliseconds( 100 );
}

// ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2414338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414338</guid><dc:creator><![CDATA[shft]]></dc:creator><pubDate>Wed, 20 Aug 2014 15:39:00 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelle Interthreadkommunikation on Wed, 20 Aug 2014 15:49:09 GMT]]></title><description><![CDATA[<p>Kannste die atomischen Zugriffe sagen wir mal nur alle 1000 Durchläufe machen? Wie sieht's dann aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2414339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414339</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 20 Aug 2014 15:49:09 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelle Interthreadkommunikation on Wed, 20 Aug 2014 16:18:46 GMT]]></title><description><![CDATA[<p>Danke für den tipp!</p>
<p>Komme jetzt auf 12 Sekunden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2414342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414342</guid><dc:creator><![CDATA[shft]]></dc:creator><pubDate>Wed, 20 Aug 2014 16:18:46 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelle Interthreadkommunikation on Wed, 20 Aug 2014 18:32:00 GMT]]></title><description><![CDATA[<p>Du könntest es auch mal mit <code>std::memory_order_relaxed</code> probieren. Wäre interessant wie viel das bringt.<br />
(Auf x86 sollte es mMn. ziemlich viel bringen.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2414367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414367</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 20 Aug 2014 18:32:00 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelle Interthreadkommunikation on Thu, 21 Aug 2014 06:58:24 GMT]]></title><description><![CDATA[<p>Ich muss leider zugeben, dass ich das mir der memory_order noch nicht ganz verstanden habe.</p>
<p>zu Releaxed</p>
<blockquote>
<p>The operation is ordered to happen atomically at some point</p>
</blockquote>
<p>At some Point? Also irgendwann? Wie gesagt, so richtig bin ich da noch nicht durchgestiegen^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2414420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414420</guid><dc:creator><![CDATA[shft]]></dc:creator><pubDate>Thu, 21 Aug 2014 06:58:24 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelle Interthreadkommunikation on Thu, 21 Aug 2014 08:42:32 GMT]]></title><description><![CDATA[<p>Naja...<br />
Kann halt sein dass du alte Werte liest.<br />
Oder dass ein anderer Lesender die Werte die du schreibst verspätet liest.<br />
Bzw. vermutlich könnte es sogar sein dass er die Werte in der falschen Reihenfolge liest.</p>
<p>Also wenn du immer um 1 ansteigende Werte liest könnte es sein dass der andere z.B. sowas wie 2, 4, 3, 5, 6, 9, 10, 8, 10... liest.</p>
<p>Je nachdem was am anderen Ende dranhängt ist das aber wurst.<br />
Z.B. für Cancel-Flags ist es meist egal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2414427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414427</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 21 Aug 2014 08:42:32 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelle Interthreadkommunikation on Thu, 21 Aug 2014 09:08:30 GMT]]></title><description><![CDATA[<p>Du meinst, selbst wenn immer weiter false gelesen wird bis irgendwann einmal true kommt und danach wieder false machts keinen Unterschied, weil die Abbruchbedingung ja schon erreicht wurde?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2414430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414430</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 21 Aug 2014 09:08:30 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelle Interthreadkommunikation on Thu, 21 Aug 2014 10:57:41 GMT]]></title><description><![CDATA[<p>Ja, OK, da kann man pathologische Fälle konstruieren wo Unsinn passieren würde.<br />
Also z.B. dass ein Teil eines Prozesses abgebrochen wird aber andere, darauf folgende Teile nicht - die dann mit unfertigen Daten arbeiten.</p>
<p>Hmmm...</p>
<p>Vielleicht muss ich meine Meinung zur Eignung für Cancel Flags nochmal überdenken. Weil man kann ja wirklich kaum sicherstellen dass der gesamte Vorgang zuverlässig abgebrochen wird sobald das Cancel-Flag 1x als &quot;true&quot; gelesen wurde -- ohne dass sich ein nachfolgender Teil darauf verlässt es im &quot;cancel&quot; Fall wieder als &quot;true&quot; zu lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2414442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414442</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 21 Aug 2014 10:57:41 GMT</pubDate></item></channel></rss>