<?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[Threads Verständnisfragen]]></title><description><![CDATA[<p>Hallo, dies ist quasi der Fortsetzungsthread zu einem anderen Problem, das ich hatte (<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1318403.html#1318403" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1318403.html#1318403</a>).<br />
Da es aber eigentlich ein neues Thema ist, habe ich einen neuen Thread eröffnet.</p>
<p>Ich möchte Teile meines Programm (Daten-Updates aus dem INet) in einem eigenen Thread laufen lassen.</p>
<p>Dazu habe ich auch Beispiel-Code gefunden, der mit '_beginthread' (process.h) arbeitet. Frage mich aber nach einigen Recherchen, welche 'Technik' vorzuziehen ist. Aus den MSDN-Artikeln geht das für mich nicht hervor:<br />
- beginthread<br />
- CreateThread<br />
- CreateThreadEx</p>
<p>Anscheinend gibt es bei den CreateThread u.U. Probleme (Memoryleaks/Abbrüche). Die API hat aber wohl auch vorteile (von extern beenden etc.)</p>
<p>Was ist denn vorzuziehen?</p>
<p>Und jetzt noch eine Design-Frage:<br />
Mein Programm erstellt WinMain eine Instanz von meinem 'Root-Objekt', das letztlich auch die Main-Loop ausführt. Vor der MainLoop wurde bisher ein 'updateDaten' aufgerufen, damit ein vector (vector.h) mit anzuzeigenden Instanzen gefüllt ist.</p>
<p>Im Multithreading-Betrieb sollte genau dieser 'updateDaten'-Bereich von einem neuen, eigenen Thread erledigt werden (initial und später zeitgesteuert). Mein 'Root-Objekt' kann ich dem Thread ja als Parameter übergeben, ich frage mich jetzt aber, wie ich den Zugriff auf den Vector synchron gestallte. Ich habe zwar von Mutexen (Plural so korrekt?!) gehört und gelesen, habe aber keine Ahnung, wie ich die auf den Vector oder dessen Elemente anwende.<br />
Der Zugriff auf Attribute der Elemente geschieht direkt, weil mir Accessoren in C++ zu umständlich sind. Letzlich soll das Element an sich ja auch konsistent sein, es sollte also erst gelesen werden, wenn es vollständig (upgedatet) ist.</p>
<p>Gebt mir doch bitte mal einen Tip. Die Lösung habe ich einfach nichr per Suche gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/186087/threads-verständnisfragen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 05 Jul 2026 11:01:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186087.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Jul 2007 20:41:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Threads Verständnisfragen on Wed, 04 Jul 2007 20:43:10 GMT]]></title><description><![CDATA[<p>Hallo, dies ist quasi der Fortsetzungsthread zu einem anderen Problem, das ich hatte (<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1318403.html#1318403" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1318403.html#1318403</a>).<br />
Da es aber eigentlich ein neues Thema ist, habe ich einen neuen Thread eröffnet.</p>
<p>Ich möchte Teile meines Programm (Daten-Updates aus dem INet) in einem eigenen Thread laufen lassen.</p>
<p>Dazu habe ich auch Beispiel-Code gefunden, der mit '_beginthread' (process.h) arbeitet. Frage mich aber nach einigen Recherchen, welche 'Technik' vorzuziehen ist. Aus den MSDN-Artikeln geht das für mich nicht hervor:<br />
- beginthread<br />
- CreateThread<br />
- CreateThreadEx</p>
<p>Anscheinend gibt es bei den CreateThread u.U. Probleme (Memoryleaks/Abbrüche). Die API hat aber wohl auch vorteile (von extern beenden etc.)</p>
<p>Was ist denn vorzuziehen?</p>
<p>Und jetzt noch eine Design-Frage:<br />
Mein Programm erstellt WinMain eine Instanz von meinem 'Root-Objekt', das letztlich auch die Main-Loop ausführt. Vor der MainLoop wurde bisher ein 'updateDaten' aufgerufen, damit ein vector (vector.h) mit anzuzeigenden Instanzen gefüllt ist.</p>
<p>Im Multithreading-Betrieb sollte genau dieser 'updateDaten'-Bereich von einem neuen, eigenen Thread erledigt werden (initial und später zeitgesteuert). Mein 'Root-Objekt' kann ich dem Thread ja als Parameter übergeben, ich frage mich jetzt aber, wie ich den Zugriff auf den Vector synchron gestallte. Ich habe zwar von Mutexen (Plural so korrekt?!) gehört und gelesen, habe aber keine Ahnung, wie ich die auf den Vector oder dessen Elemente anwende.<br />
Der Zugriff auf Attribute der Elemente geschieht direkt, weil mir Accessoren in C++ zu umständlich sind. Letzlich soll das Element an sich ja auch konsistent sein, es sollte also erst gelesen werden, wenn es vollständig (upgedatet) ist.</p>
<p>Gebt mir doch bitte mal einen Tip. Die Lösung habe ich einfach nichr per Suche gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318547</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 04 Jul 2007 20:43:10 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Verständnisfragen on Thu, 05 Jul 2007 02:09:26 GMT]]></title><description><![CDATA[<p>ja mutex ist schon mal derrichtige ansatz... deinem hauptthread und deinem extra thread bedienen sich von einem Mutex- Objekt...</p>
<p>schau mal nach mutex. Lock und Unlock... damit können daten die geschreien /gelesen werden für die anderen trhead (die das mtuex objekt benutzen) blockeirt werden bzw. diese thread werden dann solange schalfen geleget bis daws mutext objekt (unlock) wieder frei ist..</p>
<p>thread A:<br />
lock<br />
vector schreiben<br />
unlock</p>
<p>thread B:<br />
lock<br />
vector lesen<br />
unlock</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318587</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 05 Jul 2007 02:09:26 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Verständnisfragen on Thu, 05 Jul 2007 03:25:49 GMT]]></title><description><![CDATA[<p>ich würde das über einen shared_ptr + mutex lösen:</p>
<pre><code>global: (bzw. für beide threads sichtbar)

mutex m
shared_ptr&lt;daten&gt; aktuelle_daten

---

daten lesen:
    shared_ptr&lt;daten&gt; neue_daten = new daten

    neue_daten befüllen

    m.lock
    aktuelle_daten = neue_daten
    m.unlock

daten anzeigen:
    m.lock
    shared_ptr&lt;daten&gt; d = aktuelle_daten
    m.unlock

    d anzeigen
</code></pre>
<p>hat den vorteil dass du während du die daten anzeigst keine mutex gelockt halten musst, und während des auslesens auch nicht.</p>
<p>ansonsten... wenn vielleicht jemand ein gutes buch/paper empfehlen kann? ich kann es leider nicht (etwas empfehlen), ich hab' mir das alles mühsam &quot;zusammengekämpft&quot; aus 100 verschiedenen quellen. und das thema ist leider viel zu komplex um es in ein paar postings zu erklären.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318592</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 05 Jul 2007 03:25:49 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Verständnisfragen on Thu, 05 Jul 2007 11:41:02 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-403.html" rel="nofollow">HumeSikkins</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-4.html" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318866</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Thu, 05 Jul 2007 11:41:02 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Verständnisfragen on Thu, 05 Jul 2007 16:02:09 GMT]]></title><description><![CDATA[<p>Das mit em Shared Pointern hört sich gut an.<br />
Ich müßte in meinem Fall also ein<br />
shared_ptr&lt;<strong>vector</strong>&gt; aktuelle_daten definieren und bei jedem Zugriff einen Mutex drum 'klammern'. Richtig?<br />
Um die Mutex-Sperre kurz zu halten wird in beiden Fällen so lang wie möglich auf Kopien gearbeitet. Auch richtig?</p>
<p>Ich habe auch schon darüber nachgedacht, dass mein zweiter 'Zuliefer'-Thread die neuen Daten an ein beiden bakanntes Objekt übergibt und der erste dann für die Einpflege sorgt, so bleiben die eigentlichen Daten unter der Kontrolle des ersten Threads. Ist aber natürlich nicht ganz so schön.</p>
<p>Wie beende ich den Thread eigentlich wieder? Der soll ja durchlaufen und alle x Minuten updates liefern. Wenn das Prg. beendet wird, wäre es ja sauber, wenn der Main-Thrad ihn beendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1319065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1319065</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 05 Jul 2007 16:02:09 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Verständnisfragen on Thu, 05 Jul 2007 18:53:02 GMT]]></title><description><![CDATA[<p>Beenden kannst du z.B. so, indem du im lese-Thread nicht einfach Sleep(1000) oder so machst, sondern WaitForSingleObject(eventHandle, 1000). Event ist dann eben ein manual-reset-event (-&gt;CreateEvent) der vom Hauptthread gesetzt wird wenn der lese-Thread terminieren soll.<br />
WaitForSingleObject liefert im Normalfall dann WAIT_TIMEOUT zurück, und wenn der Event &quot;signaled&quot; ist eben WAIT_OBJECT_0.</p>
<p>Der Hauptthread geht also her und setzt den Event und wartet danach mit WaitForSingleObject(threadHandle, INFINITE) darauf dass der lese-Thread sich beendet hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1319166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1319166</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 05 Jul 2007 18:53:02 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Verständnisfragen on Thu, 05 Jul 2007 21:52:36 GMT]]></title><description><![CDATA[<p>Super! Danke!<br />
Die Art und Weise habe ich bei Prozessen schon mal gesehen. Damit werd' ich's mal versuchen.<br />
Thx so far.</p>
<p>Was ist mit den anderen Punkte? Hatte ich Dich richtig verstanden?<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /> Bestimmt, sonst hättest Du etwas gesagt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1319297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1319297</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 05 Jul 2007 21:52:36 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Verständnisfragen on Sat, 07 Jul 2007 04:36:15 GMT]]></title><description><![CDATA[<p>Ich denke du hast das richtig verstanden, ja.</p>
<p>Wichtig ist eben dass du mittels Mutexen sicherstellst dass nicht mehrere Threads gleichzeitig auf die Daten zugreifen können (zumindest sobald ein Thread dabei ist der etwas schreibt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1320047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1320047</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 07 Jul 2007 04:36:15 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Verständnisfragen on Sat, 07 Jul 2007 21:14:56 GMT]]></title><description><![CDATA[<p>Da setze ich mich doch gleich mal ran. Ich werde aber ein 'Austausch'-Objekt nehmen, über das die Threads kommunizieren. Dann bekommt der erste es wenigstens auch mit, wenn sich etwas geändert hat.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /> Mal was neues, dass ich bei C++ etwas verstanden habe.</p>
<p>-------</p>
<p>Hat scheinbar alles funktioniert:<br />
gemeinsame Api-Klasse für 3 Threads, die die Datenzugriffe mit einem Mutex kapselt. Thread 2 und 3 arbeiten in einer Schleife mit WaitForSingleObject und werden über Events gesteuert.</p>
<p>DANKE!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1320063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1320063</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 07 Jul 2007 21:14:56 GMT</pubDate></item></channel></rss>