<?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[MainThread soll auf ein Workerthread warten]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>Ich hab mich wieder mal ans Multithreading rangewagt. Und nun möchte ich zum ersten mal ein wenig synchronisieren. Ich habe auch zahlreiche Hilfen im Inet gefunden, wie z.b. WaitForSingleObject, bzw. auch das WaitForMultiObject, CEvents usw. usf.<br />
Nun ich habe einen MainThread (logisch) dort rufe ich mit AfxBeginThread einen neuen Thread auf. Ich speichere den Pointer CWinThread den ich zurück bekomme. Nun im Arbeitsthread kann es nun vorkommen, dass eine Message zum Mainthread gesendet wird und zwar eine WM_CLOSE. Bevor jetzt alles einfach beendet wird, soll aber der Arbeitsthread noch zuende arbeiten. Nun da ich mir eigentlich gedachte habe, dass wenn der MainThread geschlossen wird, der Arbeitsthread automatisch auch abgewürgt wird (ka ob das stimmt, aber ich nehms mal an), dachte ich, ich werde den MainThread auf den Arbeitsthread warten lassen, bis der letztere fertig ist. So habe ich die Message WM_CLOSE abgefangen.<br />
Und in der Funktion OnClose habe ich nun ein WaitForSingleObject eingefügt, mit einem HANDLE zum Arbeitsthread und INFINITE als Parameter.</p>
<p>Was passiert nun? Alles schläft ein! Sogar mein Arbeitsthread! Wodurch das ganze Programm schlafen geht und es nie beendet wird. Kann mir das einer erklären?</p>
<p>Braucht ihr noch mehr Code um das besser analysieren zu können? Oder hat jemand spontan ne Idee, welche unter die Kategorie Anfänger Fehler tritt?</p>
<p>Danke für die Hilfe im voraus!<br />
Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/145970/mainthread-soll-auf-ein-workerthread-warten</link><generator>RSS for Node</generator><lastBuildDate>Sun, 05 Apr 2026 05:33:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/145970.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 03 May 2006 00:23:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to MainThread soll auf ein Workerthread warten on Wed, 03 May 2006 00:23:32 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>Ich hab mich wieder mal ans Multithreading rangewagt. Und nun möchte ich zum ersten mal ein wenig synchronisieren. Ich habe auch zahlreiche Hilfen im Inet gefunden, wie z.b. WaitForSingleObject, bzw. auch das WaitForMultiObject, CEvents usw. usf.<br />
Nun ich habe einen MainThread (logisch) dort rufe ich mit AfxBeginThread einen neuen Thread auf. Ich speichere den Pointer CWinThread den ich zurück bekomme. Nun im Arbeitsthread kann es nun vorkommen, dass eine Message zum Mainthread gesendet wird und zwar eine WM_CLOSE. Bevor jetzt alles einfach beendet wird, soll aber der Arbeitsthread noch zuende arbeiten. Nun da ich mir eigentlich gedachte habe, dass wenn der MainThread geschlossen wird, der Arbeitsthread automatisch auch abgewürgt wird (ka ob das stimmt, aber ich nehms mal an), dachte ich, ich werde den MainThread auf den Arbeitsthread warten lassen, bis der letztere fertig ist. So habe ich die Message WM_CLOSE abgefangen.<br />
Und in der Funktion OnClose habe ich nun ein WaitForSingleObject eingefügt, mit einem HANDLE zum Arbeitsthread und INFINITE als Parameter.</p>
<p>Was passiert nun? Alles schläft ein! Sogar mein Arbeitsthread! Wodurch das ganze Programm schlafen geht und es nie beendet wird. Kann mir das einer erklären?</p>
<p>Braucht ihr noch mehr Code um das besser analysieren zu können? Oder hat jemand spontan ne Idee, welche unter die Kategorie Anfänger Fehler tritt?</p>
<p>Danke für die Hilfe im voraus!<br />
Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1049983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1049983</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 03 May 2006 00:23:32 GMT</pubDate></item><item><title><![CDATA[Reply to MainThread soll auf ein Workerthread warten on Wed, 03 May 2006 06:13:17 GMT]]></title><description><![CDATA[<p>Du hast vermutlich SendMessage verwendet und hast dies an den Main Thread gesendet. Die Nachricht WM_CLOSE kommt an aber Dein Main Thread returniert nie!</p>
<p>Also steht Dein Worker immer noch in SendMessage und wartet daruf, dass die Nachricht in Deinem Main abgearbeitet wird und der return durchgeführt wird. Nun wartest Du aber auf den Worker Thread im Main Thread, der seinerseits auf den Worker Thread wartet: Klassischer Deadlock!</p>
<p>Verwende PostMessage!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050011</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 03 May 2006 06:13:17 GMT</pubDate></item><item><title><![CDATA[Reply to MainThread soll auf ein Workerthread warten on Wed, 03 May 2006 10:43:33 GMT]]></title><description><![CDATA[<p>Wuhu ... Dankeschön funktioniert!</p>
<p>Hmmm hab ich ja noch gar nie gelesen, dass es zwei unterschiedliche gibt. Aber nützlich zu wissen ^^</p>
<p>Vielen Dank!</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050177</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 03 May 2006 10:43:33 GMT</pubDate></item><item><title><![CDATA[Reply to MainThread soll auf ein Workerthread warten on Wed, 03 May 2006 10:54:11 GMT]]></title><description><![CDATA[<p>Es gibt sogar noch ein paar mehr Funktionen zum Nachrichten weiterleiten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> (z.B. SendMessageCallback() - gibt dem Ziel eine Funktion an, die nach der Bearbeitung aufgerufen werden soll - oder SendMessageTimeout() - bricht nach einer Weile mit der Arbeit ab)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050182</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 03 May 2006 10:54:11 GMT</pubDate></item><item><title><![CDATA[Reply to MainThread soll auf ein Workerthread warten on Wed, 03 May 2006 12:28:13 GMT]]></title><description><![CDATA[<p>Oha ... das Thema habe ich bisher wirklich kaum angeschaut, merkt man irgendwie. *g*</p>
<p>Danke CStoll. Jetzt fehlt mir nur noch, wie ich benutzerdefinierte WM_Messages definieren kann ^^</p>
<p>Das mit dem mitschicken bei ON_COMMAND habe ich schon raus. Aber eine eigene Nachricht, wäre manchmal schon noch nützlich. Mal schauen was ich in der MSDN dazu finde ^^</p>
<p>Danke jedenfalls!</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050264</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 03 May 2006 12:28:13 GMT</pubDate></item><item><title><![CDATA[Reply to MainThread soll auf ein Workerthread warten on Wed, 03 May 2006 12:42:44 GMT]]></title><description><![CDATA[<p>Definieren kannst du sie ganz einfach per</p>
<pre><code class="language-cpp">#define WM_MYMESSAGE WM_USER+x
</code></pre>
<p>(x ist ein positiver Wert, der für jede deiner Nachrichten eindeutig sein sollte)</p>
<p>Den zugehörigen MessageHendler definierst du per &quot;ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050274</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 03 May 2006 12:42:44 GMT</pubDate></item><item><title><![CDATA[Reply to MainThread soll auf ein Workerthread warten on Wed, 03 May 2006 13:46:44 GMT]]></title><description><![CDATA[<p>ehm? Ups da habe ich was durcheinander gebracht. Hab was anderes gemeint, was aber eigentlich nichts mit dem zu tun hat, egal ^^<br />
Danke trotzdem.<br />
Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050311</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 03 May 2006 13:46:44 GMT</pubDate></item><item><title><![CDATA[Reply to MainThread soll auf ein Workerthread warten on Wed, 03 May 2006 13:53:36 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Definieren kannst du sie ganz einfach per</p>
<pre><code class="language-cpp">#define WM_MYMESSAGE WM_USER+x
</code></pre>
</blockquote>
<p>Besser WM_APP! Wenn man nicht genau weiß auf welcher Klasse das Fenster basiert, an das man die Nachricht sendet. Wäre es z.B. ein CEditView oder ein anderes von einer Windows Fensterklasse abgeleitetes Fenster könnte das in die Hose gehen.</p>
<p>WM_USER sollte nur verwendet werden, wenn man selbst die Fensterklasse entwickelt um damit die privaten Fensternachrichten zu definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050317</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 03 May 2006 13:53:36 GMT</pubDate></item></channel></rss>