<?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[LB_GETCOUNT reagiert wie ein blocking call...]]></title><description><![CDATA[<p>Hey!</p>
<p>Mein Thread wird einfach nicht beendet, sobald ich dies reinschreibe:</p>
<p>SendMessage(listHandle, LB_GETCOUNT, 0, 0);</p>
<p>Kann doch nicht sein? Ohne SendMessage schließt der Thread sofort.</p>
<pre><code class="language-cpp">// Im thread
	while(!exitMainThread)
	{
		Tick();
	}
</code></pre>
<p>exitMainThread setze ich auf true, sobald das Programm geschlossen wird. Trotzdem rennt der thread weiter... Was ist da los?</p>
<p>Wenn ich MessageBox(0, 0, 0, 0) nach SendMessage schreibe, dann tritt das Problem nicht auf...</p>
<p>Oder wenn ich Sleep(1000) nach SendMessage schreibe, tritt das Problem auch nicht auf!</p>
<p>Allerdings wird Tick nicht mehr ausgeführt, hab das schon getestet mit einer Datei in die bei jedem Tick() was geschrieben wird. Schließe ich das Programm, wird nix mehr reingeschrieben, aber die .exe läuft noch immer (Visual Studio: Running...)</p>
<p>Da stimmt doch was nicht... Wiegesagt, liegt nur an LB_GETCOUNT, ohne dem funzts. Hab auch schon probiert, zuerst if(listHandle) zu schreiben, da die ListBox nach Beendigung des Programmes ja zerstört wird, und so LB_GETCOUNT vielleicht blockiert, hat aber auch nicht geholfen!</p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/203573/lb_getcount-reagiert-wie-ein-blocking-call</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 05:05:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/203573.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 24 Jan 2008 03:17:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 03:17:58 GMT]]></title><description><![CDATA[<p>Hey!</p>
<p>Mein Thread wird einfach nicht beendet, sobald ich dies reinschreibe:</p>
<p>SendMessage(listHandle, LB_GETCOUNT, 0, 0);</p>
<p>Kann doch nicht sein? Ohne SendMessage schließt der Thread sofort.</p>
<pre><code class="language-cpp">// Im thread
	while(!exitMainThread)
	{
		Tick();
	}
</code></pre>
<p>exitMainThread setze ich auf true, sobald das Programm geschlossen wird. Trotzdem rennt der thread weiter... Was ist da los?</p>
<p>Wenn ich MessageBox(0, 0, 0, 0) nach SendMessage schreibe, dann tritt das Problem nicht auf...</p>
<p>Oder wenn ich Sleep(1000) nach SendMessage schreibe, tritt das Problem auch nicht auf!</p>
<p>Allerdings wird Tick nicht mehr ausgeführt, hab das schon getestet mit einer Datei in die bei jedem Tick() was geschrieben wird. Schließe ich das Programm, wird nix mehr reingeschrieben, aber die .exe läuft noch immer (Visual Studio: Running...)</p>
<p>Da stimmt doch was nicht... Wiegesagt, liegt nur an LB_GETCOUNT, ohne dem funzts. Hab auch schon probiert, zuerst if(listHandle) zu schreiben, da die ListBox nach Beendigung des Programmes ja zerstört wird, und so LB_GETCOUNT vielleicht blockiert, hat aber auch nicht geholfen!</p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442461</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Thu, 24 Jan 2008 03:17:58 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 03:39:22 GMT]]></title><description><![CDATA[<p>SendMessage() blockiert solange bis die message durch ein GetMessage() oder PeekMessage() mit PM_REMOVE von der messagequeue geholt wurde. vielleicht liegt da das problem. holt das fenster</p>
<pre><code>listHandle
</code></pre>
<p>überhaupt nachrichten ab? ansonsten kannst du noch PostMessage() verwenden. dieses postet die message in der messagequeue des fensters und kehrt danach sofort zum aufrufer zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442462</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Thu, 24 Jan 2008 03:39:22 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 04:19:14 GMT]]></title><description><![CDATA[<p>Naja, nach dem Beenden des Programms ist auch die Nachrichtenschleife futsch.<br />
Der thread, welcher SendMessage() aufruft, läuft dann aber meist noch einmal durch, bevor er eben wieder zur Abfrage des Abbruchkriteriums gelangt...</p>
<p>Wenn ich...</p>
<pre><code class="language-cpp">if(FindWindowEx(listHandle, 0, 0, 0))
	SendMessage(listHandle, LB_GETCOUNT, 0, 0);
</code></pre>
<p>...schreibe, dann wird brav geschlossen. Also liegt es wohl, wie du schon vermutet hast, daran, dass SendMessage() noch aufgerufen wird, obwohl das Hauptfenster (Und somit der MsgProc()?) schon futsch ist...</p>
<p>Mit PostMessage() schließt der Thread nun, aber der aufrufende thread hat nicht die Nachrichtenschleife. Da wollte ich PostThreadMessage() verwenden, aber wie bekomme ich die ID des Hauptthreads, der bei jedem Programm existiert, ohne dass man ihn erstellen muss, und ist das überhaupt der richtige Weg so?</p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442464</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Thu, 24 Jan 2008 04:19:14 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 04:32:00 GMT]]></title><description><![CDATA[<p>Oh sry, das hab ich überlesen:</p>
<p>&quot;The PostMessage function places (posts) a message in the message queue associated with the thread that created <strong>the specified window</strong> &quot;</p>
<p>Naja weil mit PostMessage() erhalte ich nicht mehr die Ergebnisse als wie mit SendMessage(). LB_GETCOUNT ist immer 1 und LB_ADDSTRING hat auch keinen Effekt mehr...</p>
<p>Die Nachrichtenschleife des parent windows sieht übrigens so aus:</p>
<pre><code class="language-cpp">MSG message = { };
	while(GetMessage(&amp;message, 0, 0, 0))
    {
		if(!IsDialogMessage(MyClass::getInstance().getWindowHandle(), &amp;message))	
		{
			TranslateMessage(&amp;message);
			DispatchMessage(&amp;message);
		}
    }
</code></pre>
<p>Nochmal, vielleicht zur Entwirrung:<br />
PostMessage() sende ich von einem zweiten Thread aus, hat aber keinen Effekt auf die ListBox... SendMessage() schon.</p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442465</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Thu, 24 Jan 2008 04:32:00 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 05:25:06 GMT]]></title><description><![CDATA[<p>Wo wird denn exitMainThread gesetzt? Ist die Variable global, setzte sie doch in der Messageloop an die du die Sendmessage schickst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442471</guid><dc:creator><![CDATA[exitMainThread]]></dc:creator><pubDate>Thu, 24 Jan 2008 05:25:06 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 06:03:20 GMT]]></title><description><![CDATA[<p>Ok, kurz und bündig:</p>
<p>Hauptthread:<br />
- Parent window mit MsgProc<br />
- Child window (listHandle)<br />
Bei WM_DESTROY wird exitMainThread auf true gesetzt</p>
<p>Nebenthread:</p>
<pre><code class="language-cpp">while(!exitMainThread)
    {
        Tick();
    }
</code></pre>
<p>Nachdem man das Programm beendet, werden ja die Fenster abgebaut, und der MsgProc wird dann auch nicht mehr aufgerufen. Aber der Nebenthread macht noch einen Durchgang mit SendMessage(listHandle, ...), wo er dann stecken bleibt, weil wohl das Child schon abgebaut ist bzw. der MsgProc nicht mehr vorhanden ist.</p>
<p>PostMessage hat keinen Effekt, SendNotifyMessage oder SendMessageCallback hab ich auch schon probiert, hat alles keinen Effekt, nur SendMessage tut was, blockiert aber leider...</p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442475</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Thu, 24 Jan 2008 06:03:20 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 07:06:59 GMT]]></title><description><![CDATA[<p>Fenster sind und bleiben threadafin. Deshalb sollten Threads mit anderen Fenstern aus anderen Threads nihths zu tun haben.<br />
Man sollte SendMessage nur verwenden, wenn man eine Threadsynchronisation will!<br />
PostMesssage ist nett birgt aber auch die Gefahr, die Messagequeue zuzuballern wenn der Hauptthread keine Nachrichten abholen kann (was man natürlich vermeiden sollte). Erste Wahl bleiben immer noch Events/Mutexe/Semaphoren...</p>
<p>Grundsätzlich ist es mieses Design, Deinen Hauptthtead beenden zu lassen (Fenster die andre verwenden zu zerstören), ohne die Workerthreads kontrolliert zu terminieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442494</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 24 Jan 2008 07:06:59 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 12:41:33 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Grundsätzlich ist es mieses Design, Deinen Hauptthtead beenden zu lassen (Fenster die andre verwenden zu zerstören), ohne die Workerthreads kontrolliert zu terminieren.</p>
</blockquote>
<p>ACK</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442741</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 24 Jan 2008 12:41:33 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 13:28:03 GMT]]></title><description><![CDATA[<p>Ok, aber was soll ich nun tun?<br />
Ich brauche ja neben dem Hauptthread noch einen weiteren, damit wenn mein Programm was tut, das GUI nicht ausgebremst wird.<br />
Soll ich beim beenden einfach TerminateThread aufrufen? Gibt ja keinen Speicher frei usw...</p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442786</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Thu, 24 Jan 2008 13:28:03 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 13:32:22 GMT]]></title><description><![CDATA[<p>Blos nicht - die bessere Lösung ist es, über Events oder ähnliches den Threads zu sagen, daß sie ihre Arbeit beenden sollen, und dann mit WaitForMultipleObjects() darauf warten, daß alle fertig sind.</p>
<p>(TerminateThread ist eine Notfalllösung für den Fall, daß der Thread dir dein Betriebssystem zerhackstückt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442791</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 24 Jan 2008 13:32:22 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 13:37:22 GMT]]></title><description><![CDATA[<p>Aber wie können die ihre Arbeit beenden, ohne ein Abbruchkriterium in einer Schleife? Denn es muss ja verhindert werden, dass wenn das Programm schließt, der Nebenthread noch einmal durchläuft. Oder muss ich vor jedem SendMessage() FindWindowEx() aufrufen (Wäre ja auch nicht 100% sicher!?) ?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442796</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Thu, 24 Jan 2008 13:37:22 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 13:42:09 GMT]]></title><description><![CDATA[<p>Indem du ihnen ein Abbruchkriterium gibst (gut macht sich da &quot;WaitForSingleObject(endeEvent,0)==WAIT_TIMEOUT&quot;). Die Nachrichtenschleife lebt durch den Wait...() Aufruf im Hauptprogramm noch lange genug, auch wenn die Nachrichten eventuell nicht mehr ausgewertet werden.</p>
<p>Aber der Nebenthread sollte dann statt SendMessage() lieber PostMessage() oder SendMessageTimeout() verwenden, um das Hauptprogramm über Neuigkeiten zu informieren, sonst bekommst du einen erstklassischen Deadlock (der Thread wartet darauf, daß das Hauptprogramm seine Nachricht verarbeitet, das Hauptprogramm wartet darauf, daß der Thread sich beendet).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442798</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 24 Jan 2008 13:42:09 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 13:51:23 GMT]]></title><description><![CDATA[<p>Hey!</p>
<p>Mit...</p>
<pre><code class="language-cpp">SendMessageTimeout(listHandle, LB_ADDSTRING, 32, reinterpret_cast&lt;LPARAM&gt;(&quot;blatext&quot;), SMTO_ABORTIFHUNG, 1, 0)
</code></pre>
<p>...haut es nun hin. Die Reaktion auf WM_DESTROY sah schon immer so aus:</p>
<pre><code class="language-cpp">if(threadHandle)
		WaitForSingleObject(threadHandle, INFINITE);

	CloseHandle(threadHandle);
	PostQuitMessage(0);
</code></pre>
<p>Eigentlich sollte hier doch sowieso gewartet werden, bis der Nebenthread fertig ist, und dann erst die Nachrichtenschleife &amp; Fenster zerstört werden?!</p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442805</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Thu, 24 Jan 2008 13:51:23 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 14:00:15 GMT]]></title><description><![CDATA[<p>ceplusplus@loggedoff schrieb:</p>
<blockquote>
<p>Hey!</p>
<p>Mit...</p>
<pre><code class="language-cpp">SendMessageTimeout(listHandle, LB_ADDSTRING, 32, reinterpret_cast&lt;LPARAM&gt;(&quot;blatext&quot;), SMTO_ABORTIFHUNG, 1, 0)
</code></pre>
<p>...haut es nun hin.</p>
</blockquote>
<p>Meinst du nicht, daß ein Timeout von einer Millisekunde im aktiven Dienst ein wenig knapp bemessen ist? Wenn du Pech hast, kommt die Nachricht gerade während einer etwas längerfristigen Tätigkeit des Hauptprogramms.</p>
<blockquote>
<p>Eigentlich sollte hier doch sowieso gewartet werden, bis der Nebenthread fertig ist, und dann erst die Nachrichtenschleife &amp; Fenster zerstört werden?!</p>
</blockquote>
<p>Ja, das war auch korrekt - nur während du dort gewartet hast, blieben die Nachrichten des Thread in der Warteschlange hängen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442812</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 24 Jan 2008 14:00:15 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 14:05:13 GMT]]></title><description><![CDATA[<p>Oh, hmm stimmt! Also bin ich gezwungen, ein Timeout zu setzen?<br />
SendMessageTimeout() funktioniert leider doch nicht wie gewollt:</p>
<pre><code class="language-cpp">SendMessageTimeout(listHandle, LB_GETCOUNT, 0, 0, SMTO_ABORTIFHUNG, 1000, 0);
</code></pre>
<p>Gibt immer 1 zurück, SendMessage() hingegen arbeitet korrekt. Warum hat PostMessage() usw. eigentlich keinen Effekt bei mir (Gibt bei LB_GETCOUNT auch immer 1 zurück und LB_ADDSTRING zB. hat gar keinen Effekt) ?</p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442816</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Thu, 24 Jan 2008 14:05:13 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 14:13:51 GMT]]></title><description><![CDATA[<p>Die Rückgabewerte von PostMessage() und SendMessageTimeout() sind nicht die Daten, die die Behandlungsfunktion geliefert hat. Bei PostMessage() kannst du keine Rückmeldung bekommen, weil die Nachricht ja noch unterwegs sein dürfte. Bei SendMessageTimeout kannst du als letzten Parameter eine DWORD-Variable, wo die Antwort im Erfolgsfall reingeschrieben wird:</p>
<pre><code class="language-cpp">DWORD answer,result;
result = SendMessageTimeout(listHandle,LB_GETCOUNT,0,0,SMTO_ABORTIFHUNG,1000,&amp;answer);
if(result==0)
{
  //Fehler oder Timeout
}
else
{
  //Erfolg:
  TRACE(&quot;Count returned: %d\n&quot;,answer);
}
</code></pre>
<p>(PostMessage() mit LB_ADDSTRING hat ein anderes Problem - der übergebene String ist möglicherweise schon ungültig, bevor das Zielfenster die Nachricht auswertet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442819</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 24 Jan 2008 14:13:51 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 14:35:01 GMT]]></title><description><![CDATA[<p>Hey!</p>
<p>Danke, meine Voreiligkeit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Hätte es gerne irgendwie ohne Timeout gelöst, also falls wem noch was einfällt, bitte!</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442833</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Thu, 24 Jan 2008 14:35:01 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 14:42:29 GMT]]></title><description><![CDATA[<p>Es gibt auch noch SendMessageNotify() und SendMessageCallback() als Alternativen (die aber beide nicht mit Zeigern umgehen können - das selbe Problem wie bei PostMessage()).</p>
<p>Aber was genau hast du eigentlich gegen Timeout? Die Angabe dort bedeutet doch nicht, daß die Funktion immer 1 Sekunde wartet, bevor sie abbricht - das ist die <em>maximale</em> Wartezeit. (und im Normalbetrieb liefert sie genauso zuverlässig eine Antwort wie SendMessage())</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442841</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 24 Jan 2008 14:42:29 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 14:51:29 GMT]]></title><description><![CDATA[<p>Naja, die Anwendung läuft dann eben nach Beenden noch eine Zeit lang weiter, wenn ich im Nebenthread oft SendMessageTimeout() aufrufe, kommen schon mal 10 Sekunden oder mehr zusammen. Find ich nicht so toll.</p>
<p>Was meinst du mit &quot;kann nicht mit Zeigern umgehen&quot;? Dass ich zB. nicht LB_GETCOUNT verwenden kann? Denn wenn diese Funktionen sofort zurückkehren, und die Nachricht noch nicht verarbeitet wurde, wo soll dann das Ergebnis sein?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442845</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Thu, 24 Jan 2008 14:51:29 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 14:59:50 GMT]]></title><description><![CDATA[<p>ceplusplus@loggedoff schrieb:</p>
<blockquote>
<p>Naja, die Anwendung läuft dann eben nach Beenden noch eine Zeit lang weiter, wenn ich im Nebenthread oft SendMessageTimeout() aufrufe, kommen schon mal 10 Sekunden oder mehr zusammen. Find ich nicht so toll.</p>
</blockquote>
<p>Da wäre es auch eine gute Idee, die Bedingung &quot;Timeout wurde ausgelöst&quot; als Abbruchbedingung des Threads zu verwenden - so daß du nur einen einzigen fehlgeschlagenen Aufruf hast (und eine Sekunde Wartezeit sollte akzeptabel sein).</p>
<blockquote>
<p>Was meinst du mit &quot;kann nicht mit Zeigern umgehen&quot;? Dass ich zB. nicht LB_GETCOUNT verwenden kann? Denn wenn diese Funktionen sofort zurückkehren, und die Nachricht noch nicht verarbeitet wurde, wo soll dann das Ergebnis sein?</p>
</blockquote>
<p>Nein, damit meinte ich eher das Problem, was ich oben mit LB_SETTEXT angesprochen hatte - weil die Funktionen sofort zurückkehren, sind die übergebenen String-Daten womöglich nicht mehr gültig, wenn das Ziel endlich zur Verarbeitung kommt.</p>
<p>(hast du zufällig die MSDN in Reichweite? Wenn ja, empfiehlt sich ein Blick in die Funktionsbeschreibungen - speziell die &quot;Remarks&quot; Sektion ist immer wieder aufschlußreich)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442848</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 24 Jan 2008 14:59:50 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 15:57:51 GMT]]></title><description><![CDATA[<p>Aber zur Abbruchbedingung kommt der Thread immer erst nach mehreren Aufrufen von SendMessageTimeout...</p>
<p>Oder soll ich einfach vor jedem dieser Aufrufe prüfen, ob exitThread nicht schon TRUE ist, und gegebenfalls returnen...?!</p>
<p>MSDN ist mir nicht fremd, ich bin aber einfach davon ausgegangen, dass die *Message*- Funktionen gleich funktionieren, sry.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442895</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Thu, 24 Jan 2008 15:57:51 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 17:54:06 GMT]]></title><description><![CDATA[<p>Wenn Du SendMessage (auch SendMessageTimeout) über Threadgrenzen hi9nweg verwendest, hast Du von Deinem Multithreading garnichts mehr, alles wird synchronisiert, bis die Nachrichten abgearbeitet worden sind, als ob Alles in einem Thread lääääuft.</p>
<p>Lass SendMessage aus einem Thread in einen anderen einfach bleiben!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442993</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 24 Jan 2008 17:54:06 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 19:01:30 GMT]]></title><description><![CDATA[<p>Geht nicht!</p>
<p>Mein Programm soll doch reagieren, während es beschäftigt ist:</p>
<p>- ListBox eines fremden Fensters auslesen<br />
- Daten verarbeiten<br />
- 1 Sekunde Warten (Sleep())<br />
und wieder von vorn...</p>
<p>Es soll nicht 100x in der Sekunde diese Aufgabe tun, sondern sekundenweise (1. wegen Prozessorlast, 2. muss es die Aufgabe gar nicht so oft tun). Während dem Sleep() würde das GUI doch nicht mehr reagieren...</p>
<p>Wenn ich einen weiteren Thread erstelle, und dieser eine Sekunde &quot;schläft&quot;, reagiert währenddessen das GUI... deshalb der zweite Thread.</p>
<p>Was gibt es noch für Möglichkeiten?<br />
Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1443041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443041</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Thu, 24 Jan 2008 19:01:30 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 20:00:26 GMT]]></title><description><![CDATA[<p>Warum musst Du die Daten aus der Listbox auslesen. Halte die Daten in einer eigenen Struktur parallel und schon hast Du kein Problem mehr.<br />
Lass das Fenster außen vor und arbeite mit den Daten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1443084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443084</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 24 Jan 2008 20:00:26 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 20:17:58 GMT]]></title><description><![CDATA[<p>ceplusplus@loggedoff schrieb:</p>
<blockquote>
<p>- ListBox eines <strong>fremden</strong> Fensters auslesen</p>
<p>MfG</p>
</blockquote>
<p>Ich werde wohl einen Windows Timer verwenden, der jede Sekunde die Auslese- und Verarbeitungsaufgabe aufruft, aber da ist noch ein anderes Problem:<br />
Das Programm soll per Winsock fernsteuerbar sein.</p>
<p>Die Probleme, ohne einen zusätzlichen Thread zu erstellen:<br />
- listen() geht schonmal nicht, da es blockiert und somit auch das GUI<br />
- select() geht nicht, weil ich nicht 100% Prozessorauslastung möchte, und Sleep(1) möchte ich nicht einbauen weil sich dann das GUI beim maximieren so langsam aufbaut...</p>
<p>Was soll ich nur tun?<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1443102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443102</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Thu, 24 Jan 2008 20:17:58 GMT</pubDate></item><item><title><![CDATA[Reply to LB_GETCOUNT reagiert wie ein blocking call... on Thu, 24 Jan 2008 20:28:03 GMT]]></title><description><![CDATA[<blockquote>
<p>- listen() geht schonmal nicht, da es blockiert und somit auch das GUI</p>
</blockquote>
<p>du meinst accept!<br />
<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/1443112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1443112</guid><dc:creator><![CDATA[listen-freak]]></dc:creator><pubDate>Thu, 24 Jan 2008 20:28:03 GMT</pubDate></item></channel></rss>