<?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 Synchronisieren]]></title><description><![CDATA[<p>Halli hallo,</p>
<p>hab da ein Problem mit nem Thread in meinem Prog. und zwar habe ich nen Thread den ich Folgendermaßen aus meiner <strong>VIEW Klasse</strong> aufrufe:</p>
<pre><code class="language-cpp">m_ThreadParam.m_Flag=1;
	m_ThreadParam.hMainWin = m_hWnd;
	m_MeinThread = AfxBeginThread (CPC.connect, &amp;m_ThreadParam);
</code></pre>
<p>Nun ist es so, das ich aus dem einem Thread in den anderen per POSTMESSAGE eine Nachricht schicke, die dann im Dialog in einer CListBox etwas ausgeben soll.<br />
Dazu lese ich die informationen die er ausgeben soll aus einer .txt Datei aus und sende Sie halt per POSTMESSAGE an die ListBox.<br />
Momentan ist es aber so, das er manchmal das richitge ausgibt, und manchmal dreimal hintereinander ein und das gleiche.</p>
<p>Ich denke das liegt daran das die Threads nicht Synchron laufen, ODER ?? <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>Kann da jmd was zu sagen ??</p>
<p>BIG THX im voraus !!!!!!!!!</p>
<p>Slawo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/144557/threads-synchronisieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 13:20:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/144557.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Apr 2006 12:06:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Threads Synchronisieren on Wed, 19 Apr 2006 12:06:43 GMT]]></title><description><![CDATA[<p>Halli hallo,</p>
<p>hab da ein Problem mit nem Thread in meinem Prog. und zwar habe ich nen Thread den ich Folgendermaßen aus meiner <strong>VIEW Klasse</strong> aufrufe:</p>
<pre><code class="language-cpp">m_ThreadParam.m_Flag=1;
	m_ThreadParam.hMainWin = m_hWnd;
	m_MeinThread = AfxBeginThread (CPC.connect, &amp;m_ThreadParam);
</code></pre>
<p>Nun ist es so, das ich aus dem einem Thread in den anderen per POSTMESSAGE eine Nachricht schicke, die dann im Dialog in einer CListBox etwas ausgeben soll.<br />
Dazu lese ich die informationen die er ausgeben soll aus einer .txt Datei aus und sende Sie halt per POSTMESSAGE an die ListBox.<br />
Momentan ist es aber so, das er manchmal das richitge ausgibt, und manchmal dreimal hintereinander ein und das gleiche.</p>
<p>Ich denke das liegt daran das die Threads nicht Synchron laufen, ODER ?? <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>Kann da jmd was zu sagen ??</p>
<p>BIG THX im voraus !!!!!!!!!</p>
<p>Slawo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040492</guid><dc:creator><![CDATA[Slawo]]></dc:creator><pubDate>Wed, 19 Apr 2006 12:06:43 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Synchronisieren on Wed, 19 Apr 2006 12:31:32 GMT]]></title><description><![CDATA[<p>Ich vermute mal, dass Du einen Zeiger in PostMessage verwendest. Evtl. auf ein Speichersegment im Stack. Da der Stack weiterverwendet wird und die Nachricht irgendwann asynchson ankommt ist der Speicher längst wiederverwendet.<br />
Du musst Dir hier eine eigene Verwaltung einfallen lassen, die garantiert, dass die Daten nicht verändert wurden.</p>
<p>Ich verwende oft einfach eine Liste, die über eine CCriticalSection abgesichert wird. In diese schreibt der Thread seine Daten. Sendet per PostMessage eine Info, das neue Daten da sind, und der Hauptthread liest die Daten aus der Liste und löscht sie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040515</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 19 Apr 2006 12:31:32 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Synchronisieren on Wed, 19 Apr 2006 13:19:31 GMT]]></title><description><![CDATA[<p>ohh man <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> , hört sich ja höchst kompliziert an. mein PostMessage sieht so aus :</p>
<pre><code class="language-cpp">PostMessage(((PTHREADPARAM)pParam)-&gt;hMainWin, WM_NACHRICHT, 0, 0);
</code></pre>
<p>und ist so definiert:</p>
<pre><code class="language-cpp">ON_MESSAGE(WM_NACHRICHT, MeineNachricht)
</code></pre>
<pre><code class="language-cpp">LRESULT CBVSView::MeineNachricht(WPARAM wparam, LPARAM lparam)
{
	switch(wparam)
	{
		case 0: {CString statstr;
				 CStdioFile f;
				 f.Open(&quot;StatusLog.txt&quot;, CFile::modeRead | CFile::typeText);
				 f.ReadString(statstr);
				 m_ListBoxAusgabe.AddString(statstr);
				 f.Close();
				}break;
		case 1:{m_ListBoxAusgabe.ResetContent();}break;// ListBox leeren

	}

	return 1;
}
</code></pre>
<p>Bzw. gibt es eine andere möglichkeit Daten bzw. Strings, denn es sind eigentlich nur Strings die ich da versende, zwischen zwei threads auszutauschen?<br />
Was ich also eigentlich machen will ist folgendes. Ich möchte soeine art Status ausgabe in m einem Programm machen, und das soll immer in der ListBox ausgegeben werden.Sprich wenn irgendetwas passiert, z.B. ein Wert wurde berechnet, etwas wurde in der DB gespeichert usw. möchte ich das halt mitkriegen und das dann in der ListBox ausgeben, damit ich sehe was da gerade bei mir im Programm passiert.<br />
Das Problem ist halt, wie schreibe ich aus dem Neuen Thread in die ListBox die in dem Hauptthread drinne ist.<br />
Mit</p>
<pre><code class="language-cpp">m_ListBox.AddString(&quot;juhu&quot;);
</code></pre>
<p>geht das ja nicht Threadübergreifend.</p>
<p>Gibt es da vielleicht noch einen anderen Ansatz den man verfolgen könnte ??? Vielleicht mit nem Editfeld oder so?</p>
<p>Bzw. würde es helfen wenn ich die beiden Threads irgendwie Synchronisieren würde? (Aber wie <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="😕"
    /> <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="😕"
    /> <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1040547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040547</guid><dc:creator><![CDATA[Slawo]]></dc:creator><pubDate>Wed, 19 Apr 2006 13:19:31 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Synchronisieren on Wed, 19 Apr 2006 13:21:09 GMT]]></title><description><![CDATA[<p>Wieso soll das nicht Theadübergreifend gehen. Siehe FAQ. Ableiten von CWInThread.<br />
Zeiger auf den Dialog übergeben. Auf Zeigen-&gt;ListBox zugreifen.<br />
Wenn du auch noch was anderes mit der Listbox machst dann Sync.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040567</guid><dc:creator><![CDATA[Unix-Tom]]></dc:creator><pubDate>Wed, 19 Apr 2006 13:21:09 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Synchronisieren on Wed, 19 Apr 2006 14:17:10 GMT]]></title><description><![CDATA[<p>Unix-Tom schrieb:</p>
<blockquote>
<p>Wieso soll das nicht Theadübergreifend gehen. Siehe FAQ. Ableiten von CWInThread.<br />
Zeiger auf den Dialog übergeben. Auf Zeigen-&gt;ListBox zugreifen.<br />
Wenn du auch noch was anderes mit der Listbox machst dann Sync.</p>
</blockquote>
<p>Nein es geht nicht. Dann fliegt ihm beim AddString ein ASSERT um die Ohren weil diw CWnd Objekte in einer threadlokalen Map hinterlegt werden.<br />
Zudem würde dies eine direkte synchronisation bedeuten. Dann kann man sich die ganze Sache mit dem Thread fast auch sparen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11370">@Slawo</a>:<br />
Du schreibst vermutlich die Daten in die Datei und führst PostMessage durch. Dein Pr0oblem ist aber dass evtl. die Daten noch nicht abgehöt sind, wenn Dein Thread die selbe Datei wieder öffnet und wieder etwas hineinschreibt. Daher werden öfters die Daten doppelt angezeigt, weil der Fensterthread die evtl. gleich zweimal hintereinander Deine Nachricht bearbeitet.<br />
Ich bleibe bei menem Vorschalg. Der ist in jedem Falle einfacher als Dein Konstrukt und bedarf nicht der Festplatte als Austauschmedium.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040600</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 19 Apr 2006 14:17:10 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Synchronisieren on Thu, 20 Apr 2006 04:28:19 GMT]]></title><description><![CDATA[<p>Na wenn du meinst. Ich habe hier mehrere Programme (Serverprogramme) welche seit Jahren so laufen.<br />
Wenn der Hauptthread nichts im Steuerelement macht braucht man nichtmal zu synchronisieren.<br />
Und ob CWnd Objekte in einer threadlokalen Map hinterlegt werden spielt dabei keine Rolle weil man dem Thread (nennt sich dann übrigens Benutzeroberflächenthread und ist von CWinThread abgeleitet) einen Zeiger auf den Dialog übergibt<br />
Aber vermutlich weißt Du mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041022</guid><dc:creator><![CDATA[Unix-Tom]]></dc:creator><pubDate>Thu, 20 Apr 2006 04:28:19 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Synchronisieren on Thu, 20 Apr 2006 06:43:49 GMT]]></title><description><![CDATA[<p>Ich würde dem Thread eine Adresse mitgeben, in die er seine Strings eintragen kann (z.B. ein privates Element der Fensterklasse) - dann kann er den String dort einfügen und den &quot;Chef&quot; benachrichtigen:</p>
<pre><code class="language-cpp">class CMyView : public CView //oder so ähnlich
{
private:
  std::list&lt;CString&gt; statusdata;

  static int ThreadFunc(LPVOID param)
  {
    CMyView* mthis=(CMyView*) param;
    ...
    CString status=&quot;OK&quot;;
    mthis-&gt;statusdata.push_back(status);
    mthis-&gt;PostMessage(WM_CHANGED,0,0);
  }

  void OnChanged()//Nachrichtenbehandlung WM_CHANGED
  {
    CString status=statusdata.front();
    ...
    statusdata.pop_front();//fertig verarbeitet - kann gelöscht werden
  }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1041042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041042</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Apr 2006 06:43:49 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Synchronisieren on Thu, 20 Apr 2006 08:26:02 GMT]]></title><description><![CDATA[<p>Genaus so würde ich es machen. Nur musst Du den Zugriff Lesend/Schreibend auf die Liste mit einer Critical Section absichern! STL Objekte im allgemeinen nicht thread safe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041085</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 20 Apr 2006 08:26:02 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Synchronisieren on Thu, 20 Apr 2006 20:19:06 GMT]]></title><description><![CDATA[<p>Muß es unbedingt PostMessage sein? Es geht doch auch SendMessage</p>
<pre><code class="language-cpp">CString Text(&quot;Zeig es an&quot;);
SendMessage(((PTHREADPARAM)pParam)-&gt;hMainWin, WM_NACHRICHT, 0, (LPARAM)(LPCTSTR)Text);
</code></pre>
<p>und ist so definiert:</p>
<pre><code class="language-cpp">ON_MESSAGE(WM_NACHRICHT, MeineNachricht)
</code></pre>
<pre><code class="language-cpp">LRESULT CBVSView::MeineNachricht(WPARAM wparam, LPARAM lparam)
{
	switch(wparam)
	{
		case 0: if(lparam)
			m_ListBoxAusgabe.AddString(statstr);
                            break;
		case 1:{m_ListBoxAusgabe.ResetContent();}break;// ListBox leeren

	}

	return 1;
}
</code></pre>
<p>SendMessage wartet auf das ergebnis der gesendeten Message also die Message wird erst verarbeitet, wenn der Thread (das Hauptwindow) wieder Leistung bekommt und damit ist die Message Threadsafe. Anderweitige Meinung würden mich Interessieren!</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041578</guid><dc:creator><![CDATA[CTecS]]></dc:creator><pubDate>Thu, 20 Apr 2006 20:19:06 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Synchronisieren on Fri, 21 Apr 2006 07:35:38 GMT]]></title><description><![CDATA[<p>CTecS schrieb:</p>
<blockquote>
<p>Muß es unbedingt PostMessage sein? Es geht doch auch SendMessage</p>
</blockquote>
<p>SendMessaage hat den gravierenden Nachteil, dass dann der Workerthread nicht weiter läuft bis der andere Thread die Nachricht bearbeitet hat. Dann benötigt man auch keinen extra Thread. SendMessage für zu einer direkten Threadsynchronisation. D.h. wird in diesem Moment im anderen Thread keine Nachrichtenschleife ausgeführt, dann steht der Workerthread.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041682</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 21 Apr 2006 07:35:38 GMT</pubDate></item></channel></rss>