<?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[WindowProc + Haupt-Thread]]></title><description><![CDATA[<p>Hallo Forum!</p>
<p>Ich habe eine Frage zu der WindowProc bzw. WNDPROC Methode...</p>
<pre><code>LRESULT CALLBACK MyEventHandler(HWND Window, UINT EventMessage, WPARAM WParam, LPARAM LParam)
</code></pre>
<p>...mit der man die Nachrichten verarbeitet,<br />
die Windows an das eigene Programm schickt.</p>
<p>Diese Callback Funktion wird ja nicht nur durch indirekte Nachrichten<br />
aus der Warteschleife aufgerufen (welche mit Get/Peek/DispatchMessage<br />
verarbeitet werden), sondern auch durch direkte Nachrichten die z.B.<br />
Windows oder SendMessage schickt.</p>
<p>**Jetzt meine Frage, wenn MyEventHandler durch so eine direkte Nachricht<br />
aufgerufen wird, wird dann der aktuelle Haupt-Thread (main loop) einfach<br />
so mittendrin in seiner Ausführung unterbrochen?</p>
<p>Oder läuft die WindowProc MyEventHandler dann in einem extra Thread ab?<br />
So oder so könnte das ja zu Problemen führen, wenn in der WindowProc<br />
Variablen verändert werden, auf denen auch der Haupt-Thread gerade<br />
arbeitet, richtig?**</p>
<p>Danke!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219778/windowproc-haupt-thread</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Apr 2026 02:01:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219778.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 07 Aug 2008 13:37:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Thu, 07 Aug 2008 13:37:25 GMT]]></title><description><![CDATA[<p>Hallo Forum!</p>
<p>Ich habe eine Frage zu der WindowProc bzw. WNDPROC Methode...</p>
<pre><code>LRESULT CALLBACK MyEventHandler(HWND Window, UINT EventMessage, WPARAM WParam, LPARAM LParam)
</code></pre>
<p>...mit der man die Nachrichten verarbeitet,<br />
die Windows an das eigene Programm schickt.</p>
<p>Diese Callback Funktion wird ja nicht nur durch indirekte Nachrichten<br />
aus der Warteschleife aufgerufen (welche mit Get/Peek/DispatchMessage<br />
verarbeitet werden), sondern auch durch direkte Nachrichten die z.B.<br />
Windows oder SendMessage schickt.</p>
<p>**Jetzt meine Frage, wenn MyEventHandler durch so eine direkte Nachricht<br />
aufgerufen wird, wird dann der aktuelle Haupt-Thread (main loop) einfach<br />
so mittendrin in seiner Ausführung unterbrochen?</p>
<p>Oder läuft die WindowProc MyEventHandler dann in einem extra Thread ab?<br />
So oder so könnte das ja zu Problemen führen, wenn in der WindowProc<br />
Variablen verändert werden, auf denen auch der Haupt-Thread gerade<br />
arbeitet, richtig?**</p>
<p>Danke!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560879</guid><dc:creator><![CDATA[Gast2008]]></dc:creator><pubDate>Thu, 07 Aug 2008 13:37:25 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Thu, 07 Aug 2008 14:43:11 GMT]]></title><description><![CDATA[<p>Richtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560919</guid><dc:creator><![CDATA[O.o]]></dc:creator><pubDate>Thu, 07 Aug 2008 14:43:11 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Thu, 07 Aug 2008 15:08:51 GMT]]></title><description><![CDATA[<p>Ok also da diese &quot;direkten nachrichten&quot; (wie sie in &quot;Windows Programmierung&quot;<br />
von Microsoft Press genannt werden) offenbar wirklich einfach so in den<br />
Code reinplatzen können stellt sich mir die Frage, wie kann ich (mit Hilfe<br />
der WinAPI z.B.?) bestimmte Code zeilen mutex machen? Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560928</guid><dc:creator><![CDATA[Gast2008]]></dc:creator><pubDate>Thu, 07 Aug 2008 15:08:51 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Thu, 07 Aug 2008 15:19:45 GMT]]></title><description><![CDATA[<p>btw diese &quot;direkten nachrichten&quot; werden hier...</p>
<p><a href="http://msdn.microsoft.com/en-us/library/ms644927.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms644927.aspx</a></p>
<p>...als &quot;nonqueued messages&quot; bezeichnet. Und genau um die gehts mir <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560934</guid><dc:creator><![CDATA[Gast2008]]></dc:creator><pubDate>Thu, 07 Aug 2008 15:19:45 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Thu, 07 Aug 2008 15:46:10 GMT]]></title><description><![CDATA[<p>Was zur Hölle meinst du mit &quot;bestimmte Codezeilen mutex machen&quot;?</p>
<p>Das Einzige was ich kenne ist ein Mutex: <a href="http://msdn.microsoft.com/en-us/library/ms684266.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms684266.aspx</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560951</guid><dc:creator><![CDATA[O.o]]></dc:creator><pubDate>Thu, 07 Aug 2008 15:46:10 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Thu, 07 Aug 2008 16:44:39 GMT]]></title><description><![CDATA[<p>Bei Windows landen alle Nachrichten in einer Nachrichtenschleife, die man in einer CALLBACK-Funktion abfangen oder einfach zur weiteren Bearbeitung an Windows zurückgibt. Mutex (multiple execute) bezieht sich auf Objekte - z.B. Dateien, parallele Threads, etc. -, die sich gegenseitig behindern können. Das eine hat mit dem anderen nichts zu tun!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560984</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Thu, 07 Aug 2008 16:44:39 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Thu, 07 Aug 2008 17:17:45 GMT]]></title><description><![CDATA[<p>Gast2008 ich verstehe die Frage nicht, könntest du etwas präzieser werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560995</guid><dc:creator><![CDATA[verwirrt]]></dc:creator><pubDate>Thu, 07 Aug 2008 17:17:45 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Thu, 07 Aug 2008 18:54:02 GMT]]></title><description><![CDATA[<p>Dadurch das die WindowProc zu jedem beliebigen Zeitpunkt den eigentlichen<br />
Programmcode unterbrechen kann, wird es doch zu Problemen kommen können,<br />
wenn WindowProc und der eigentliche Programmcode beide auf gleichen<br />
Variablen arbeiten.</p>
<p>Mit &quot;mutex machen&quot; meinte ich, das ich diese Variablen unter gegenseitigen<br />
Ausschluss stellen muss (<a href="http://de.wikipedia.org/wiki/Mutex" rel="nofollow">http://de.wikipedia.org/wiki/Mutex</a>),<br />
da mir die WindowProc ja quasi wie ein nebenläufiger Thread die gemeinsam<br />
verwendeten Variablen zu ungewollten Zeitpunkten verändern kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1561058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1561058</guid><dc:creator><![CDATA[Gast2008]]></dc:creator><pubDate>Thu, 07 Aug 2008 18:54:02 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Thu, 07 Aug 2008 20:13:58 GMT]]></title><description><![CDATA[<p>Wenn du Variable threatübergreifend benutzen willst würde ich dir CriticalSection empfehlen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1561115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1561115</guid><dc:creator><![CDATA[verwirrt]]></dc:creator><pubDate>Thu, 07 Aug 2008 20:13:58 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Fri, 08 Aug 2008 06:45:32 GMT]]></title><description><![CDATA[<p>Es gibt keine willkürliche Unterbrechung und alle Aufrufe in einer WndProc geschehen immer innerhalb eines Thread Contextes und erfolgen synchron.<br />
Zum einfachen Verständnig stell Dir einfach vor, dass SendMessage nichts anderes ist als der Aufruf Deiner WndProc. Also eine simple Subroutine. Hier wird nichts unterbrochen sondern alles geschieht schon synchron.</p>
<p>I/O Nachrichten wie Tastatur und Maus werden die Messagequeue gepackt und nur von der Messgeloop abgearbeitet.</p>
<p>Ein Mutex/CriticalSection in einer WndProc macht Null Sinn, denn per Defiition ist eine WndProc threadafin, das heißt: Sie wird nur in einem Thread Conmtext genutzt.</p>
<p>Sicherlich kann eine WndProc rekursiv aufgerufen werden. Das geschieht sogar sehr häufig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1561239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1561239</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 08 Aug 2008 06:45:32 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Sat, 09 Aug 2008 10:12:15 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Es gibt keine willkürliche Unterbrechung</p>
</blockquote>
<p>Hallo Martin,</p>
<p>Windows kann doch zu beliebigen Zeitpunkten eine &quot;Nonqueued Messages&quot;<br />
an mein Programm schicken und damit meinen Programmcode unterbrechen.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1561774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1561774</guid><dc:creator><![CDATA[Gast2008]]></dc:creator><pubDate>Sat, 09 Aug 2008 10:12:15 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Sat, 09 Aug 2008 12:03:27 GMT]]></title><description><![CDATA[<p>Nein! Eben nicht.<br />
Wenn Du Code ausführst dann führt Dein Thread eben Code aus. Es gibt keinerlei Möglichkeit in diesem Moment an ein Fenster Deines Thread eine Nachricht zu senden, außer Dein Code tut es selbst durch Funktionen wie SetWindowText, SetFocus, CreateWindow etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1561803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1561803</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 09 Aug 2008 12:03:27 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Sat, 09 Aug 2008 21:17:00 GMT]]></title><description><![CDATA[<p>Non-queued messages sind einfach Nachrichten, die nicht auf die Ausführung von anderen Nachrichten warten müssen. Wenn du also SendMessage(...) aufrufst, wird deine Window Procedure mit den gegebenen Parametern aufgerufen _ohne_ vorher bereits gesendete noch nicht verarbeitete Nachrichten zuerst abzuarbeiten.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562035</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 09 Aug 2008 21:17:00 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Sun, 10 Aug 2008 11:09:55 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Es gibt keinerlei Möglichkeit in diesem Moment an ein Fenster Deines Thread eine Nachricht zu senden, außer Dein Code tut es selbst</p>
</blockquote>
<p>Hallo,</p>
<p>ich weiß das ich diese &quot;nonqueued messages&quot; auch selbst auslösen kann,<br />
aber sie können auch einfach durch windows ausgelöst werden:</p>
<p><a href="http://msdn.microsoft.com/en-us/library/ms644927.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms644927.aspx</a><br />
&quot;<em>The system typically sends nonqueued messages to notify a window of events<br />
that affect it. For example, when the user activates a new application window,<br />
the system sends the window a series of messages, including WM_ACTIVATE,<br />
WM_SETFOCUS, and WM_SETCURSOR. These messages notify the window that it has<br />
been activated, that keyboard input is being directed to the window, and that<br />
the mouse cursor has been moved within the borders of the window. Nonqueued<br />
messages can also result when an application calls certain system functions.&quot;</em></p>
<p>Hier steht eindeutig, dass diese Nachrichten sowohl vom Programmierer<br />
selbst aber auch vom System ausgelöst werden können!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562174</guid><dc:creator><![CDATA[Gast2008]]></dc:creator><pubDate>Sun, 10 Aug 2008 11:09:55 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Sun, 10 Aug 2008 11:32:54 GMT]]></title><description><![CDATA[<p>Aber sie passieren eben nicht asynchron!!!<br />
Das steht doch da auch. Und auf die entsprechenden Funktionen habe ich ja auch schon hingewiesen.</p>
<p>Solch eine Nachricht passiert nur wenn Du eine Windows API Funktion mit entsprechender Funktionsweise ausführst! Und das auch nur wenn es ein Fenster aus Deinem Thread betrifft.</p>
<p>Wenn Du eine Schleife baust, in der keinerlei Windows API Funktion vorkommt, dann wird an kein Fenster dieses Threads irgend eine Nachricht ausgeliefert! Punkt!!! Das ist z.B. der Moment in dem im Taskmanger angezeigt wird, dass die Applikation nicht reagiert.</p>
<p>Betrifft es ein Fenster aus einem anderen Thread gibt es erst recht keine Unterbrechung! Dann muss sogar die Nachrichtenschleife laufen, sonst blockiert solch eine Funktion sogar, die SendMessage verwendet.</p>
<p>Es gibt keine asynchronen SendMessage Aufrufe, außer man führt eine Nachrichtenschleife aus, oder führt eine COM Funktion aus einem STA in einem anderen Appartment aus.</p>
<p>SendMessage ist nichts anderes als ein Gosub in Deine Nachrichtenschleife (wenn das Fenster im selen Thread liegt)!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562193</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sun, 10 Aug 2008 11:32:54 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Sun, 10 Aug 2008 13:57:58 GMT]]></title><description><![CDATA[<p>Ok also wenn das wirklich so ist, das &quot;nonqueued messages&quot;<br />
niemals von windows alleine aus eintrudeln sondern nur<br />
durch den eigenen aufruf von winapi funktionen, dann<br />
brauch ich da ja nichts absichern. danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562243</guid><dc:creator><![CDATA[Gast2008]]></dc:creator><pubDate>Sun, 10 Aug 2008 13:57:58 GMT</pubDate></item><item><title><![CDATA[Reply to WindowProc + Haupt-Thread on Sun, 10 Aug 2008 14:47:02 GMT]]></title><description><![CDATA[<p>So ist es!<br />
Man muss sich in einer Single Thread GUI Applikation nur gewahr sein, dass der Aufruf einer API Funktion eben auch zu einem beliebigen rekursiven Aufruf von Fensterprozeduren auswirken kann. Und wenn man es geschickt anstellt, kriegt man dann auch leicht einen Stack Overflow hin <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="😉"
    /></p>
<p>Aber eine Fensterprozedurwird immer nur in einem Threadkontext aufgerufen. Mutexe, CriticalSections und Semaphoren hätten also nie eine Wirkung...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562263</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sun, 10 Aug 2008 14:47:02 GMT</pubDate></item></channel></rss>