<?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 kontrolliert beenden]]></title><description><![CDATA[<p>Nabend,</p>
<p>habe schon ein wenig im Netz rumgesuft - wollte das Thema jedoch nochmal aufschnappen.</p>
<p>Ich habe zwei Threads in einem Prozess Lauf, einem den Main-Thread + SubThread. Den SubThread möchte ich kontrolliert beenden, indem ich diesem &quot;sage&quot; Shutdown vorgang eingeleitet, bitte jetzt &quot;alle Prozesse&quot; ebenfalls beenden.<br />
---&gt; Solange bitte warten!</p>
<p>Naja, grundlegend ist mir die Idee gekommen, mach ich zwei bool Variablen, eine für den Zustand und eine für den Einleitungsvorgang, die vom zweiten Thread sequenziell abgefragt wird.<br />
Die Andere Variable soll den Zustand beschreiben AN/AUS. Somit setzte ich die DoQuit Variable auf true, und warte bis der Zustand &quot;IsRunning&quot; auf false ist.</p>
<p>Evt. gibt jemand ein Satement dazu ab?</p>
<p>Mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/158708/thread-kontrolliert-beenden</link><generator>RSS for Node</generator><lastBuildDate>Tue, 21 Jul 2026 16:50:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/158708.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 07 Sep 2006 20:31:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Thread kontrolliert beenden on Thu, 07 Sep 2006 20:31:13 GMT]]></title><description><![CDATA[<p>Nabend,</p>
<p>habe schon ein wenig im Netz rumgesuft - wollte das Thema jedoch nochmal aufschnappen.</p>
<p>Ich habe zwei Threads in einem Prozess Lauf, einem den Main-Thread + SubThread. Den SubThread möchte ich kontrolliert beenden, indem ich diesem &quot;sage&quot; Shutdown vorgang eingeleitet, bitte jetzt &quot;alle Prozesse&quot; ebenfalls beenden.<br />
---&gt; Solange bitte warten!</p>
<p>Naja, grundlegend ist mir die Idee gekommen, mach ich zwei bool Variablen, eine für den Zustand und eine für den Einleitungsvorgang, die vom zweiten Thread sequenziell abgefragt wird.<br />
Die Andere Variable soll den Zustand beschreiben AN/AUS. Somit setzte ich die DoQuit Variable auf true, und warte bis der Zustand &quot;IsRunning&quot; auf false ist.</p>
<p>Evt. gibt jemand ein Satement dazu ab?</p>
<p>Mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133317</guid><dc:creator><![CDATA[JayJay]]></dc:creator><pubDate>Thu, 07 Sep 2006 20:31:13 GMT</pubDate></item><item><title><![CDATA[Reply to Thread kontrolliert beenden on Thu, 07 Sep 2006 22:09:04 GMT]]></title><description><![CDATA[<p>Mein Statement: An sich finde ich die Idee mit den 2 Bool-Variablen ganz gut! Das ist simpel, und, solange du nur mit je einem Thread je eine Variable beschreibst, sollte das auch Thread-sicher sein.</p>
<p>Ich persönlich benutze eine andere Methode: Ich nehme eine auch eine bool Variable (bPleaseExit oder so...). Wenn der Hauptthread gerne hätte, dass sich der Sub-Thread beendet, setzt er diese auf true.<br />
Der Sub-Thread checkt regelmäßig die bPleaseExit, wenn die auf true ist, beendet er friedlich sein Dasein.</p>
<p>Der Haupt-Thread lässt dem Sub-Thread 500 ms Zeit, sich zu beenden, ansonsten schließt er ihn. Du kannst mit <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcemain4/html/cerefWaitForSingleObject.asp" rel="nofollow">WaitForSingleObject</a> dann prüfen, ob der Thread schon beendet ist.<br />
So z.B.</p>
<pre><code>bPleaseExit = true;
if ( WAIT_TIMEOUT == WaitForSingleObject( hThreadHandle, 500 ) )
{
    TerminateThread( hThreadHandle, 0 );
}
// Thread ist weg  :D
</code></pre>
<p>Grüße,<br />
Badestrand</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133348</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 07 Sep 2006 22:09:04 GMT</pubDate></item><item><title><![CDATA[Reply to Thread kontrolliert beenden on Thu, 07 Sep 2006 22:14:40 GMT]]></title><description><![CDATA[<p>Ich habe nicht ganz exakt verstanden wie Du das meinst. Der Main Thread soll auf das Ende des SubThredas Warten und dann soll sich der Prozess selbst beenden? Vielleicht mal die wichtigen Codezeilen posten.</p>
<p>Generell bevorzuge ich Events zum Warten auf das Ende eines Threads:<br />
::WaitForSingleObject(hEvent,INFINITE);<br />
Diese Anweisung wartet solange bis das Event (zu erzeugen mit ::CreateEvent(...)) im Zustand &quot;signaled&quot; ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133350</guid><dc:creator><![CDATA[NickHappy]]></dc:creator><pubDate>Thu, 07 Sep 2006 22:14:40 GMT</pubDate></item><item><title><![CDATA[Reply to Thread kontrolliert beenden on Thu, 07 Sep 2006 22:49:31 GMT]]></title><description><![CDATA[<p>NickHappy schrieb:</p>
<blockquote>
<p>Ich habe nicht ganz exakt verstanden wie Du das meinst. Der Main Thread soll auf das Ende des SubThredas Warten und dann soll sich der Prozess selbst beenden? Vielleicht mal die wichtigen Codezeilen posten.</p>
</blockquote>
<p>Ich denke, er will seinen Prozess beenden. Und bevor das getan ist, will er alle Threads sauber beenden.</p>
<p>NickHappy schrieb:</p>
<blockquote>
<p>Generell bevorzuge ich Events zum Warten auf das Ende eines Threads:<br />
::WaitForSingleObject(hEvent,INFINITE);</p>
</blockquote>
<p>Naja, ich halte immer wenig von dem INIFINTE-Warten. Kann dazu führen, dass der wartende Thread hängen bleibt ! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133360</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 07 Sep 2006 22:49:31 GMT</pubDate></item><item><title><![CDATA[Reply to Thread kontrolliert beenden on Fri, 08 Sep 2006 06:22:54 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>NickHappy schrieb:</p>
<blockquote>
<p>Generell bevorzuge ich Events zum Warten auf das Ende eines Threads:<br />
::WaitForSingleObject(hEvent,INFINITE);</p>
</blockquote>
<p>Naja, ich halte immer wenig von dem INIFINTE-Warten. Kann dazu führen, dass der wartende Thread hängen bleibt ! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
</blockquote>
<p>Warum soll den der Thread &quot;hängenbleiben&quot;?<br />
Wenn sowas vorkommt, dann würde ich mal nach dem Fehler suchen und nicht einen Fehler mit einem anderen beheben (TerminateThread aufzurufen ist IMHO eine Todsünde:<br />
<a href="http://blog.kalmbachnet.de/?postid=6" rel="nofollow">http://blog.kalmbachnet.de/?postid=6</a><br />
<a href="http://blog.kalmbachnet.de/?postid=16" rel="nofollow">http://blog.kalmbachnet.de/?postid=16</a><br />
<a href="http://blog.kalmbachnet.de/?postid=17" rel="nofollow">http://blog.kalmbachnet.de/?postid=17</a><br />
)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133414</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Fri, 08 Sep 2006 06:22:54 GMT</pubDate></item><item><title><![CDATA[Reply to Thread kontrolliert beenden on Fri, 08 Sep 2006 11:26:14 GMT]]></title><description><![CDATA[<p>Zu: Warum soll der Thread hängenbleiben?<br />
Wenn sich (aus irgendeinem Grund) der Thread nicht selber beenden sollte, wartet der Hauptthread logischerweise endlos-lange. Das bezeichne ich als hängenbleiben...</p>
<p>Bei mir gab es mit TerminateThread noch nie einen dead-lock. Schien mir ziemlich speziell zu sein, mit dem printf. <em>Wenn</em> beide Threads printf benutzen und <em>wenn</em> der eine Thread suspended wird und und und...</p>
<p>Da nehm ich dieses (für mich geringeres) Risiko des Deadlocks auf mich. Wie soll man einen Thread auch sonst zwangs-beenden??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133595</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 08 Sep 2006 11:26:14 GMT</pubDate></item><item><title><![CDATA[Reply to Thread kontrolliert beenden on Fri, 08 Sep 2006 12:15:26 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Da nehm ich dieses (für mich geringeres) Risiko des Deadlocks auf mich. Wie soll man einen Thread auch sonst zwangs-beenden??</p>
</blockquote>
<p>man könnte ihn z.b. abschiessen. wenn der in irgend'ner systemfunktion festsitzt und niemals an deinem bool 'please_exit' vorbeikommt, kannste mit 'SetThreadContext' seinen pc von ausserhalb auf 0 setzen, das sollte ihn augenblicklich killen (musst ihn natürlich in einen exception handler einpacken und im __except-pfad steht dann ein return).</p>
<p>bleibt nur noch die frage, ob das nicht genauso fies ist wie ein 'TerminateThread' <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>kleine berichtigung: der thread darf natürlich nicht im wait-state festhängen damit das funzt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133613</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Fri, 08 Sep 2006 12:15:26 GMT</pubDate></item><item><title><![CDATA[Reply to Thread kontrolliert beenden on Fri, 08 Sep 2006 13:13:59 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Wenn sich (aus irgendeinem Grund) der Thread nicht selber beenden sollte</p>
</blockquote>
<p>, musst du den Grund suchen...TerminateThread ist, wie Jochen schon sagte: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133702</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Fri, 08 Sep 2006 13:13:59 GMT</pubDate></item><item><title><![CDATA[Reply to Thread kontrolliert beenden on Fri, 08 Sep 2006 14:25:21 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Wenn sich (aus irgendeinem Grund) der Thread nicht selber beenden sollte</p>
</blockquote>
<p>Das ist für mich genau der Punkt: Such doch bitte nach dem Fehler, warum sich der Thread nicht beendet und murks nicht an anderere Stelle um den Fehler rum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133755</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Fri, 08 Sep 2006 14:25:21 GMT</pubDate></item><item><title><![CDATA[Reply to Thread kontrolliert beenden on Fri, 08 Sep 2006 14:38:31 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>erstmal Danke für das Interesse an diesem Thread, es werden hier viele gute Dinge aufgegriffen.<br />
Ich hab mir die letzten Stunden evt. eine etwas bessere Variante einfallen lassen. Es gibt nicht mehr nur boolische Variablen sondern eine einzige Int-Variable und eine einzige bool Variable.<br />
Die bool Variable initiiert den Shutdown-Vorgang, der entsprechend in (ALLEN) Threads bearbeitet wird.<br />
Sollte ein Thread beginnen wird die Int-Variable erhöht, sollte ein Thread beendet werden (legitim) wird diese um 1 erniedrigt.</p>
<p>=&gt; DLL-Loader Prinzip</p>
<p>Parallel wird gewartet, bis die Int-Variable (anz. der offenen Threads) bei null angelangt ist. Sollte dies nicht innerhalb 10(bzw. auch 0.5) Sekunden geschehen, werden alle Threads per TerminateThread manuell beendet (als Sicherung während der Programmierung, für die Fehlersuche!! <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>Bye</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133757</guid><dc:creator><![CDATA[JayJay]]></dc:creator><pubDate>Fri, 08 Sep 2006 14:38:31 GMT</pubDate></item><item><title><![CDATA[Reply to Thread kontrolliert beenden on Fri, 08 Sep 2006 17:47:52 GMT]]></title><description><![CDATA[<p>JayJay schrieb:</p>
<blockquote>
<p>Sollte ein Thread beginnen wird die Int-Variable erhöht, sollte ein Thread beendet werden (legitim) wird diese um 1 erniedrigt.</p>
</blockquote>
<p>Dies darfst Du dann aber nur mit den &quot;Interlocked&quot;-Funktionen machen!</p>
<p>Aber dann kannst Du eigentlich gleiche Semaphore verwenden, da kannst Du auch drauf warten.</p>
<p>Aber das ist wie oben erwähnt bei Threads gar nicht nötig, da Du auf das Handle des Threads einfach warten kannst (oder auch auf mehrere).</p>
<p>JayJay schrieb:</p>
<blockquote>
<p>werden alle Threads per TerminateThread manuell beendet (als Sicherung während der Programmierung, für die Fehlersuche!! <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>
</blockquote>
<p>Wie gesagt: ich kann es nicht verstehen, dass man Threads abschiessen muss... ok, nur wenn man zu faul ist den Fehler zu suchen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133860</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Fri, 08 Sep 2006 17:47:52 GMT</pubDate></item><item><title><![CDATA[Reply to Thread kontrolliert beenden on Fri, 08 Sep 2006 19:15:47 GMT]]></title><description><![CDATA[<blockquote>
<blockquote>
<p>JayJay schrieb:<br />
werden alle Threads per TerminateThread manuell beendet (als Sicherung während der Programmierung, für die Fehlersuche!! <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>
</blockquote>
<p>Wie gesagt: ich kann es nicht verstehen, dass man Threads abschiessen muss... ok, nur wenn man zu faul ist den Fehler zu suchen...</p>
</blockquote>
<p>Naja wie gesagt, zu letzt werden diese Dinge komplett entfernt!! <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1133920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133920</guid><dc:creator><![CDATA[JayJay]]></dc:creator><pubDate>Fri, 08 Sep 2006 19:15:47 GMT</pubDate></item><item><title><![CDATA[Reply to Thread kontrolliert beenden on Fri, 08 Sep 2006 19:16:32 GMT]]></title><description><![CDATA[<p>Achja, wie soll ich eig. das verstehen?</p>
<blockquote>
<p>Dies darfst Du dann aber nur mit den &quot;Interlocked&quot;-Funktionen machen!</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1133922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133922</guid><dc:creator><![CDATA[JayJay]]></dc:creator><pubDate>Fri, 08 Sep 2006 19:16:32 GMT</pubDate></item><item><title><![CDATA[Reply to Thread kontrolliert beenden on Fri, 08 Sep 2006 19:23:04 GMT]]></title><description><![CDATA[<p>InterlockedIncrement<br />
InterlockedDecrement</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133927</guid><dc:creator><![CDATA[verstehen]]></dc:creator><pubDate>Fri, 08 Sep 2006 19:23:04 GMT</pubDate></item><item><title><![CDATA[Reply to Thread kontrolliert beenden on Fri, 08 Sep 2006 19:23:22 GMT]]></title><description><![CDATA[<p>JayJay schrieb:</p>
<blockquote>
<p>Achja, wie soll ich eig. das verstehen?</p>
<blockquote>
<p>Dies darfst Du dann aber nur mit den &quot;Interlocked&quot;-Funktionen machen!</p>
</blockquote>
</blockquote>
<p>In etwa so <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="😉"
    /> : <a href="http://www.winapi.net/index.php?inhalt=t1" rel="nofollow">http://www.winapi.net/index.php?inhalt=t1</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1133928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1133928</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Fri, 08 Sep 2006 19:23:22 GMT</pubDate></item></channel></rss>