<?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[Kommunikation zwischen Thread: Benachrichtigung?]]></title><description><![CDATA[<p>Ich habe bereits im Ansi C Forum gepostet<br />
(<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1162993.html#1162993" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1162993.html#1162993</a><br />
aber anscheinend ist meine Frage doch eher API-abhängig:</p>
<p>Ich habe mein Hauptprogramm, welches einen Thread startet. Es soll nun möglich sein, dass das Hauptprogramm weiter seine Arbeit verrichtet (also nicht blockiert oder wartet), aber vom Zusatzthread benachrichtigt werden kann.<br />
Bislang scheint meine einzige Möglichkeit zu sein, dass das HP immer wieder auf eine gemeinsame Variable pollt, um herauszufinden, ob der Thread eine Nachricht hinterlassen hat.<br />
Am liebsten wäre mir natürlich aber sowas (pseudocode):</p>
<pre><code>void startThread()
{
    while(true)
    {

        if (...)
           notify(listener);
    }
}

void listener()
{
   // nachricht erhalten UND läuft im thread des Hauptprogrammes!!
}

main()
{
   _beginthread(startThread)

   while(true)
   {
     // muss solange laufen, bis nachricht eintrifft bei listener()
   }
}
</code></pre>
<p>In dem Zusammenhang bin ich auf postMessage gestossen. Leider habe ich für mich keine verständlichen Beispiele gefunden. Könnte mir das weiterhelfen?</p>
<p>Danke für jede Idee!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/163308/kommunikation-zwischen-thread-benachrichtigung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Jul 2026 18:54:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/163308.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 28 Oct 2006 11:43:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kommunikation zwischen Thread: Benachrichtigung? on Sat, 28 Oct 2006 11:43:19 GMT]]></title><description><![CDATA[<p>Ich habe bereits im Ansi C Forum gepostet<br />
(<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1162993.html#1162993" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1162993.html#1162993</a><br />
aber anscheinend ist meine Frage doch eher API-abhängig:</p>
<p>Ich habe mein Hauptprogramm, welches einen Thread startet. Es soll nun möglich sein, dass das Hauptprogramm weiter seine Arbeit verrichtet (also nicht blockiert oder wartet), aber vom Zusatzthread benachrichtigt werden kann.<br />
Bislang scheint meine einzige Möglichkeit zu sein, dass das HP immer wieder auf eine gemeinsame Variable pollt, um herauszufinden, ob der Thread eine Nachricht hinterlassen hat.<br />
Am liebsten wäre mir natürlich aber sowas (pseudocode):</p>
<pre><code>void startThread()
{
    while(true)
    {

        if (...)
           notify(listener);
    }
}

void listener()
{
   // nachricht erhalten UND läuft im thread des Hauptprogrammes!!
}

main()
{
   _beginthread(startThread)

   while(true)
   {
     // muss solange laufen, bis nachricht eintrifft bei listener()
   }
}
</code></pre>
<p>In dem Zusammenhang bin ich auf postMessage gestossen. Leider habe ich für mich keine verständlichen Beispiele gefunden. Könnte mir das weiterhelfen?</p>
<p>Danke für jede Idee!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1162998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1162998</guid><dc:creator><![CDATA[Serethos]]></dc:creator><pubDate>Sat, 28 Oct 2006 11:43:19 GMT</pubDate></item><item><title><![CDATA[Reply to Kommunikation zwischen Thread: Benachrichtigung? on Sat, 28 Oct 2006 11:56:39 GMT]]></title><description><![CDATA[<p>Auch bei PostMessage() muß der Hauptthread abfragen, ob eine Nachricht angekommen ist - der Vorteil hier ist, daß ein WinAPI-Programm normalerweise ständig in der Nachrichtenschleife läuft und damit auch Nachrichten verarbeitet, die per PostMessage() und Kollegen reingekommen sind.</p>
<p>(wenn du aber ein Konsolenprogramm hast (und dein Beispiel sieht nach Konsole aus), hast du keine Nachrichtenschleife - damit funktioniert das nicht)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1163007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1163007</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 28 Oct 2006 11:56:39 GMT</pubDate></item><item><title><![CDATA[Reply to Kommunikation zwischen Thread: Benachrichtigung? on Sat, 28 Oct 2006 12:02:20 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Auch bei PostMessage() muß der Hauptthread abfragen, ob eine Nachricht angekommen ist - der Vorteil hier ist, daß ein WinAPI-Programm normalerweise ständig in der Nachrichtenschleife läuft und damit auch Nachrichten verarbeitet, die per PostMessage() und Kollegen reingekommen sind.</p>
</blockquote>
<p>der vorteil von 'PostMessage()' ist, dass der sender nicht wartet bis der empfänger die msg aus der queue gesaugt hat. also kein blocking des senders.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1163011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1163011</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Sat, 28 Oct 2006 12:02:20 GMT</pubDate></item><item><title><![CDATA[Reply to Kommunikation zwischen Thread: Benachrichtigung? on Sat, 28 Oct 2006 12:06:00 GMT]]></title><description><![CDATA[<p>net schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Auch bei PostMessage() muß der Hauptthread abfragen, ob eine Nachricht angekommen ist - der Vorteil hier ist, daß ein WinAPI-Programm normalerweise ständig in der Nachrichtenschleife läuft und damit auch Nachrichten verarbeitet, die per PostMessage() und Kollegen reingekommen sind.</p>
</blockquote>
<p>der vorteil von 'PostMessage()' ist, dass der sender nicht wartet bis der empfänger die msg aus der queue gesaugt hat. also kein blocking des senders.</p>
</blockquote>
<p>Der Sender blockiert auch nicht, wenn er das Hauptprogramm über eine globale Variable oder einen Event informiert <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="😉"
    /> (und dem OP war eher wichtig, daß das Hauptprogramm (also der Empfänger) nicht blockiert)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1163014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1163014</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 28 Oct 2006 12:06:00 GMT</pubDate></item><item><title><![CDATA[Reply to Kommunikation zwischen Thread: Benachrichtigung? on Sat, 28 Oct 2006 12:10:08 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Sender blockiert auch nicht, wenn er das Hauptprogramm über eine globale Variable oder einen Event informiert <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="😉"
    /> (und dem OP war eher wichtig, daß das Hauptprogramm (also der Empfänger) nicht blockiert)</p>
</blockquote>
<p>klar, ich wollt' nur die liste der vorteile von 'PostMessage()' ergänzen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1163017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1163017</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Sat, 28 Oct 2006 12:10:08 GMT</pubDate></item><item><title><![CDATA[Reply to Kommunikation zwischen Thread: Benachrichtigung? on Sat, 28 Oct 2006 12:44:08 GMT]]></title><description><![CDATA[<p>Na gut, ich denke, dann sind alle Möglichkeiten abgeklärt. Ich werde beim guten alten pollen bleiben .. Dank für alle Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1163045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1163045</guid><dc:creator><![CDATA[Serethos]]></dc:creator><pubDate>Sat, 28 Oct 2006 12:44:08 GMT</pubDate></item><item><title><![CDATA[Reply to Kommunikation zwischen Thread: Benachrichtigung? on Sat, 28 Oct 2006 13:35:08 GMT]]></title><description><![CDATA[<p>&quot;Pollen&quot; würde ich nicht machen. Ich würde ein Event verwenden und als Funktion in der Nachrichtenschleife MsgWaitForMultipleObjects verwenden!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1163073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1163073</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 28 Oct 2006 13:35:08 GMT</pubDate></item><item><title><![CDATA[Reply to Kommunikation zwischen Thread: Benachrichtigung? on Sat, 28 Oct 2006 18:35:50 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>MsgWaitForMultipleObjects</p>
</blockquote>
<p>er hat doch geschrieben dass der thread nicht warten soll...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1163289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1163289</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Sat, 28 Oct 2006 18:35:50 GMT</pubDate></item><item><title><![CDATA[Reply to Kommunikation zwischen Thread: Benachrichtigung? on Sat, 28 Oct 2006 19:03:00 GMT]]></title><description><![CDATA[<p>Das tut er mit dieser Funktion ja auch nicht. Es ist IMHO nur besser als pollen und kostet keine weitere Systemzeit. Ein Event, das vom Worker gesetzt wird, kann damit liecht geprüft werden und man blockiert die Nachrichtenschlefe nicht und man bekommt dennoch wunderbar alle Nachrichten mit.</p>
<p>Just my 2 cents!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1163314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1163314</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 28 Oct 2006 19:03:00 GMT</pubDate></item><item><title><![CDATA[Reply to Kommunikation zwischen Thread: Benachrichtigung? on Sat, 28 Oct 2006 19:33:57 GMT]]></title><description><![CDATA[<p>Hmm, ich habe das genau so interpretiert wie net. Ein paar Versuche von mir mit Events (und postMessage) haben nämlich gezeigt, dass man dadurch zwar auf das Ende eines Threads (oder eines Zwischenzustands) warten kann, aber nicht der Ursprungsthread komplett asynchron benachrichtigt wird.</p>
<p>Könntest Du vielleicht ein Minimalbeispiel geben, wo Thread1 ungehindert weiterläuft, bis er durch eine Notifikation über etwas informiert wird..?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1163340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1163340</guid><dc:creator><![CDATA[Serethos]]></dc:creator><pubDate>Sat, 28 Oct 2006 19:33:57 GMT</pubDate></item><item><title><![CDATA[Reply to Kommunikation zwischen Thread: Benachrichtigung? on Sat, 28 Oct 2006 20:55:35 GMT]]></title><description><![CDATA[<p>Vielleicht reden wir aneinander vorbei.<br />
Man nehme ein Event, das den gewünschten Zustand im Workerthread signalisiert.</p>
<pre><code class="language-cpp">while (AsLangAsWeHaveToDoThis())
{
    if (WaitForSingleObject(hEvent,0)==WAIT_TIMEOUT)
    {
        // Do the stuff that need to be done
        // The Workerthread ist stil executing
        ...
    }
    else
    {
        // The worker thread has done its job
        ...
    }
}
</code></pre>
<p>MsgWaitFor... benutze ich dann wenn der Mainthread auch noch eine Nachrichtenschleife nutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1163400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1163400</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 28 Oct 2006 20:55:35 GMT</pubDate></item><item><title><![CDATA[Reply to Kommunikation zwischen Thread: Benachrichtigung? on Sat, 28 Oct 2006 23:33:06 GMT]]></title><description><![CDATA[<p>Aha, ich glaube, ich habe einfach WaitForSingleObject falsch benutzt und ihn unendlich lang warten lassen. Demnach tastet er nur das Event ab und macht dann weiter. Ich werd das gleich mal probieren, Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1163482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1163482</guid><dc:creator><![CDATA[Serethos]]></dc:creator><pubDate>Sat, 28 Oct 2006 23:33:06 GMT</pubDate></item><item><title><![CDATA[Reply to Kommunikation zwischen Thread: Benachrichtigung? on Sun, 29 Oct 2006 15:33:43 GMT]]></title><description><![CDATA[<p>Serethos schrieb:</p>
<blockquote>
<p>Aha, ich glaube, ich habe einfach WaitForSingleObject falsch benutzt und ihn unendlich lang warten lassen. Demnach tastet er nur das Event ab und macht dann weiter. Ich werd das gleich mal probieren, Danke.</p>
</blockquote>
<p>So ist es. Und mit der Msg... Version kann man sogar noch Nachrichten in seine MessageLoop einschliessen und dann sogar INFINTE beim warten wählen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1163807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1163807</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sun, 29 Oct 2006 15:33:43 GMT</pubDate></item></channel></rss>