<?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[Threads Beenden durch eine Aufgerufene Funktion]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>Ich habe mir Heute den Ganzen tag den Kopf über folgendes Problem zerbrochen:</p>
<p>Es gibt ein Programm mit Mehreren Threads, einer Davon sucht in einem Verzeichniss nach einer Stopdatei, wenn diese vorhanden ist soll er das ganze Programm Beenden.</p>
<p>Das Beenden wird von einer Unterfunktion ausgeführt, die entweder von einem Ende Knopf oder vom besagten Thread (Loop Thread oder Polling Thread) aufgerufen wird.</p>
<p>Mit dem Beenden Knopf funktioniert das Beenden einwandfrei.</p>
<p>jedoch ruft der Loop Thread zum Beenden die Unterfunktion auf, die wiederum den Loop Thread (im MFC Modul OnOK) zu Beenden versucht.</p>
<p>zur Verdeutlichung:</p>
<pre><code class="language-cpp">//Loop Thread  
//....
BeendeAlles(); --&gt; Ruft MFC Funktion OnOK auf wo alles Beendet wird 
BeendeDichSelbst();
</code></pre>
<p>Ein Thypisches Laufzeitproblem Da die BeendeAlles Funktion ja auf was wartet was erst erreicht werden kann wenn Die BeendeAlles Funktion selbst fertigestellt ist.</p>
<p>Ich habe sehr wenig erfahrung mit MFC (aber gute c++ Kentnisse) und weis nicht genau wie ich zur Lösung Beispielsweise aus der OnOK funktion die warte auf Loop Tread ausklammern könnte.</p>
<p>Andererseits würde mir als alter Konsolenguru ein Aufrufen der Mainfunktion mit einem Event zusagen, da die Mainfunktion warten kann bis sich der Loop Thread Beendet hat und sich anschließend selbst beenden.</p>
<p>an die Dritte Möglichkeit, die Durch ein Abschuß des Loop Threads in der BeendeAlles Funktion den Loop Thread beendet habe ich auch schon gedacht, weis aber nicht genau wie man ein Thread Zwangsbeendet ohne Speicherlecks zu hinterlassen.</p>
<p>Wer von euch hat Ideen dazu oder gar ganz neue Konzepte und würde mich damit aufmuntern ?</p>
<p>Ich hoffe ich habs nicht zu Kompliziert Dargestellt</p>
<p>Fisch</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/155011/threads-beenden-durch-eine-aufgerufene-funktion</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 20:59:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/155011.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Aug 2006 19:07:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Threads Beenden durch eine Aufgerufene Funktion on Tue, 01 Aug 2006 19:07:01 GMT]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>Ich habe mir Heute den Ganzen tag den Kopf über folgendes Problem zerbrochen:</p>
<p>Es gibt ein Programm mit Mehreren Threads, einer Davon sucht in einem Verzeichniss nach einer Stopdatei, wenn diese vorhanden ist soll er das ganze Programm Beenden.</p>
<p>Das Beenden wird von einer Unterfunktion ausgeführt, die entweder von einem Ende Knopf oder vom besagten Thread (Loop Thread oder Polling Thread) aufgerufen wird.</p>
<p>Mit dem Beenden Knopf funktioniert das Beenden einwandfrei.</p>
<p>jedoch ruft der Loop Thread zum Beenden die Unterfunktion auf, die wiederum den Loop Thread (im MFC Modul OnOK) zu Beenden versucht.</p>
<p>zur Verdeutlichung:</p>
<pre><code class="language-cpp">//Loop Thread  
//....
BeendeAlles(); --&gt; Ruft MFC Funktion OnOK auf wo alles Beendet wird 
BeendeDichSelbst();
</code></pre>
<p>Ein Thypisches Laufzeitproblem Da die BeendeAlles Funktion ja auf was wartet was erst erreicht werden kann wenn Die BeendeAlles Funktion selbst fertigestellt ist.</p>
<p>Ich habe sehr wenig erfahrung mit MFC (aber gute c++ Kentnisse) und weis nicht genau wie ich zur Lösung Beispielsweise aus der OnOK funktion die warte auf Loop Tread ausklammern könnte.</p>
<p>Andererseits würde mir als alter Konsolenguru ein Aufrufen der Mainfunktion mit einem Event zusagen, da die Mainfunktion warten kann bis sich der Loop Thread Beendet hat und sich anschließend selbst beenden.</p>
<p>an die Dritte Möglichkeit, die Durch ein Abschuß des Loop Threads in der BeendeAlles Funktion den Loop Thread beendet habe ich auch schon gedacht, weis aber nicht genau wie man ein Thread Zwangsbeendet ohne Speicherlecks zu hinterlassen.</p>
<p>Wer von euch hat Ideen dazu oder gar ganz neue Konzepte und würde mich damit aufmuntern ?</p>
<p>Ich hoffe ich habs nicht zu Kompliziert Dargestellt</p>
<p>Fisch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108783</guid><dc:creator><![CDATA[fisch1983]]></dc:creator><pubDate>Tue, 01 Aug 2006 19:07:01 GMT</pubDate></item><item><title><![CDATA[Reply to Threads Beenden durch eine Aufgerufene Funktion on Tue, 01 Aug 2006 21:34:28 GMT]]></title><description><![CDATA[<p>Du übergibst deinem Thread einen Zeiger auf deine Haupt <strong>CWnd</strong> Klasse. Über den Zeiger schickst du per <strong>PostMessage</strong> eine eigene Nachricht, welche per <strong>ON_MESSAGE</strong> abgearbeitet wird. Du könntest natürlich auch z.b. direkt <strong>WM_CLOSE</strong> schicken. Mit <strong>WaitForSingleObject</strong> kannst du auf einen Thread, mit dem entsprechenden <strong>HANDLE</strong>, warten bis er beendet wurde. Wenn du einen Thread per <strong>AfxBeginThread</strong> startest, dann kannst du den Zeiger des Threads speichern (<strong>CWinThread</strong>). Das Handle bekommst du dann über die Member-Variable <strong>m_hThread</strong>.<br />
Um mit Events umgehen zu können schaust du dir vielleicht mal <strong>CEvent</strong> an. Auch auf ein CEvent kannst du mit WaitForSingleObject warten. Es gibt allerdings auch <strong>CSingleLock</strong> bzw. <strong>CMultiLock</strong>.</p>
<p>Allgemein zu dem Thema kannst du mal in der MSDN nach <strong>Multithreading</strong> suchen.</p>
<p>Alles was Fett markiert ist, sind Stichwörter für die Suche in der MSDN oder sonst wo.</p>
<p>Grüssli und viel Glück</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1108865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1108865</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 01 Aug 2006 21:34:28 GMT</pubDate></item></channel></rss>