<?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[Thread wird zu früh beendet.]]></title><description><![CDATA[<p>Ich starte einen Thread der für das speichern von Daten zuständig ist, was eigentlich auch funktioniert. Es kann aber auch passieren, dass der Thread kurz vor dem beenden des Programms gestartet wird. Dabei wird dann auch der Thread beendet, obwohl er noch nicht vollständig gespeichert hat. Ich wollte nun einen Counter einbauen, der die gestarteten Threads zählt und das Programm erst dann wirklich beenden, wenn kein Thread mehr läuft. Nur wird mein Thread vom Betriebssystem einfach so beendet und nicht wirklich zuende ausgeführt, obwohl mein Programm immer noch wartet.<br />
Kann man einen Thread so starten, dass er nicht einfach beendet wird? Oder muss ich dazu einen eigenen Prozess starten?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/155267/thread-wird-zu-früh-beendet</link><generator>RSS for Node</generator><lastBuildDate>Thu, 23 Jul 2026 04:40:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/155267.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 Aug 2006 08:02:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Thread wird zu früh beendet. on Fri, 04 Aug 2006 08:02:13 GMT]]></title><description><![CDATA[<p>Ich starte einen Thread der für das speichern von Daten zuständig ist, was eigentlich auch funktioniert. Es kann aber auch passieren, dass der Thread kurz vor dem beenden des Programms gestartet wird. Dabei wird dann auch der Thread beendet, obwohl er noch nicht vollständig gespeichert hat. Ich wollte nun einen Counter einbauen, der die gestarteten Threads zählt und das Programm erst dann wirklich beenden, wenn kein Thread mehr läuft. Nur wird mein Thread vom Betriebssystem einfach so beendet und nicht wirklich zuende ausgeführt, obwohl mein Programm immer noch wartet.<br />
Kann man einen Thread so starten, dass er nicht einfach beendet wird? Oder muss ich dazu einen eigenen Prozess starten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1110344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1110344</guid><dc:creator><![CDATA[Gast10]]></dc:creator><pubDate>Fri, 04 Aug 2006 08:02:13 GMT</pubDate></item><item><title><![CDATA[Reply to Thread wird zu früh beendet. on Fri, 04 Aug 2006 08:12:30 GMT]]></title><description><![CDATA[<p>Du darfst das aufrufende Programm erst beenden, wenn dein Thread mit der Arbeit fertig ist.</p>
<p>Da gibts im Windows Wartefunktionen, mit denen du das realisieren kannst.</p>
<p>Sehr gutes Beispiel:<br />
<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/creating_threads.asp" rel="nofollow">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/creating_threads.asp</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1110357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1110357</guid><dc:creator><![CDATA[DarthZiu]]></dc:creator><pubDate>Fri, 04 Aug 2006 08:12:30 GMT</pubDate></item><item><title><![CDATA[Reply to Thread wird zu früh beendet. on Fri, 04 Aug 2006 08:42:24 GMT]]></title><description><![CDATA[<p>Sowas ähnliches mache ich ja mit meinem Counter. Das Problem ist aber, das der Thread einfach so beendet wird, auch wenn meine Anwendung noch nicht beendet ist. Sie wartet immer noch auf das korrekte Ende des Threads.<br />
Ich kann meinen Thread debuggen, bis zu einem Sleep, dann ist der Thread weg, und mein debugger ist an der Wartestelle. Der andere Thread ist auch nicht mehr in der Liste der Threads zu sehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1110393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1110393</guid><dc:creator><![CDATA[Gast10]]></dc:creator><pubDate>Fri, 04 Aug 2006 08:42:24 GMT</pubDate></item><item><title><![CDATA[Reply to Thread wird zu früh beendet. on Fri, 04 Aug 2006 08:58:32 GMT]]></title><description><![CDATA[<p>Poste doch mal bitte den wesentlichen Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1110401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1110401</guid><dc:creator><![CDATA[DarthZiu]]></dc:creator><pubDate>Fri, 04 Aug 2006 08:58:32 GMT</pubDate></item><item><title><![CDATA[Reply to Thread wird zu früh beendet. on Fri, 04 Aug 2006 09:22:50 GMT]]></title><description><![CDATA[<p>Ein Thread wird nicht &quot;einfach&quot; beendet...<br />
Es gibt dabei nur zwei Ausnahme: TerminetThread (sollte man *nie* aufrufen) und &quot;ExitProcess&quot;.</p>
<p>Das zweitere wird (leider) von der CRT beim beenden von &quot;main&quot; aufgerufen.<br />
(siehe auch: When does a program terminate?<br />
<a href="http://blog.kalmbachnet.de/?postid=65" rel="nofollow">http://blog.kalmbachnet.de/?postid=65</a><br />
)</p>
<p>Wenn Du noch Threads laufen hast, dann merke Dir einfach die Thread handles und warte mittels &quot;WaitForMultipleObjects&quot; auf die Handles kurz vor dem &quot;return&quot; aus Deiner &quot;main&quot;. Beachte aber bitte, dass Du hier nur immer mit max. 64 Handles warten kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1110421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1110421</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Fri, 04 Aug 2006 09:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to Thread wird zu früh beendet. on Fri, 04 Aug 2006 09:24:45 GMT]]></title><description><![CDATA[<p>Das ist ein bisschen aufwendig.<br />
Das ganze ist eine DLL die von anderen Anwendungen indirekt verwendet wird.<br />
Möglicherweise liegt es daran, dass der Thread somit vielleicht vom Anwendungsprozess aus gestartet wird und auch mit diesem beendet wird. Mein Warteloop könnte könnte in einem anderen Prozess laufen. Aber dann wäre es doch nicht möglich, dass die statische Counter Varibale den gleichen Wert in beiden Prozessen hat, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1110423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1110423</guid><dc:creator><![CDATA[Gast10]]></dc:creator><pubDate>Fri, 04 Aug 2006 09:24:45 GMT</pubDate></item><item><title><![CDATA[Reply to Thread wird zu früh beendet. on Fri, 04 Aug 2006 09:27:01 GMT]]></title><description><![CDATA[<p>Mach den &quot;Warte Loop&quot; in DllMain bei &quot;DLL_PROCESS_DETACH&quot; rein. (oder alternativ als static /struct/class, welche im Destruktor das Warten macht)</p>
<p>ADD: Aber die beste Lösung wäre eine Funktion &quot;DeInit&quot; zu Verfügung zu stellen, welche von der Anwendung aufgerufen werden würde...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1110425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1110425</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Fri, 04 Aug 2006 09:27:01 GMT</pubDate></item><item><title><![CDATA[Reply to Thread wird zu früh beendet. on Fri, 04 Aug 2006 16:08:18 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Mach den &quot;Warte Loop&quot; in DllMain bei &quot;DLL_PROCESS_DETACH&quot; rein. (oder alternativ als static /struct/class, welche im Destruktor das Warten macht)</p>
</blockquote>
<p>So ähnlich ist es ja bereits, nur sind die anderen Threads schon beendet worden (nicht sauber), wenn ich dort warte.</p>
<blockquote>
<p>ADD: Aber die beste Lösung wäre eine Funktion &quot;DeInit&quot; zu Verfügung zu stellen, welche von der Anwendung aufgerufen werden würde...</p>
</blockquote>
<p>Geht nicht. Meine DLL ist eine Extension, die beim speichern benutzt werden kann. Auf die Anwendungen die sie verwendet hab ich keinen einfluss.</p>
<p>Kann man einen Thread nicht einfach als eigenständigen Thread starten (so ne Art Miniprozess)? Oder muss ich wirklick nen anderen richtigen Prozess starten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1110674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1110674</guid><dc:creator><![CDATA[Gast10]]></dc:creator><pubDate>Fri, 04 Aug 2006 16:08:18 GMT</pubDate></item><item><title><![CDATA[Reply to Thread wird zu früh beendet. on Fri, 04 Aug 2006 18:06:42 GMT]]></title><description><![CDATA[<p>Gast10 schrieb:</p>
<blockquote>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Mach den &quot;Warte Loop&quot; in DllMain bei &quot;DLL_PROCESS_DETACH&quot; rein. (oder alternativ als static /struct/class, welche im Destruktor das Warten macht)</p>
</blockquote>
<p>So ähnlich ist es ja bereits, nur sind die anderen Threads schon beendet worden (nicht sauber), wenn ich dort warte.</p>
</blockquote>
<p>Verstehe ich nicht ganz... wie kann man denn einen Thread &quot;nicht sauber&quot; beenden?<br />
Und wenn der Thread beendet ist, kann man trotzdem noch mit &quot;WaitForX...&quot; auf den Thread &quot;warten&quot;...</p>
<blockquote>
<p>Kann man einen Thread nicht einfach als eigenständigen Thread starten (so ne Art Miniprozess)? Oder muss ich wirklick nen anderen richtigen Prozess starten?</p>
</blockquote>
<p>??? Was willst Du denn machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1110739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1110739</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Fri, 04 Aug 2006 18:06:42 GMT</pubDate></item><item><title><![CDATA[Reply to Thread wird zu früh beendet. on Sat, 05 Aug 2006 09:49:45 GMT]]></title><description><![CDATA[<p>btw. Thread wird auch beendet wenn eine Exception fliegt und nichtgefangen wird</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1110930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1110930</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Sat, 05 Aug 2006 09:49:45 GMT</pubDate></item><item><title><![CDATA[Reply to Thread wird zu früh beendet. on Wed, 16 Aug 2006 13:19:49 GMT]]></title><description><![CDATA[<p>Definiere global einen Mutex;</p>
<pre><code>[cpp]
HANDLE lock = CreateMutext(NULL, FALSE, NULL);
[/cpp]
</code></pre>
<p>In deinem Thread zum Speichern belegst du den Mutex mit und gibst diesen nach bearbeitung wieder frei</p>
<pre><code>[cpp]
if (WAIT_OBJECT_0 == WaitForSingleObject(lock , INFINITE) {

//dein code...

}
ReleaseMutext(lock);
return 1
[/cpp]
</code></pre>
<p>In deinem Hauptprogramm wartest du einfach auf den Mutex bevor es sich beendet</p>
<pre><code>[cpp]
if (WAIT_OBJECT_0 == WaitForSingleObject(lock , INFINITE) {

 return EXIT_SUCCESS;

}
[/cpp]
</code></pre>
<p>Müsste gehen, hab es allerdings nicht ausprobiert <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>mfg dave</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118381</guid><dc:creator><![CDATA[Daveron]]></dc:creator><pubDate>Wed, 16 Aug 2006 13:19:49 GMT</pubDate></item></channel></rss>