<?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[ReadDirectoryChangesW: wie sauber beenden?]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine Schleife in einen Thread ausgelagert, die auf Änderungen innerhalb eines Ordners (synchron) reagiert:</p>
<pre><code class="language-cpp">while(ReadDirectoryChangesW(m_hDir...) { /* tu irgendwas */ }
</code></pre>
<p>Frage: wie beende ich das dann jetzt am besten (wenn mein Programm sich beenden soll)? Denn ReadDirectoryChangesW blockt ja.<br />
Ein Aufruf (außerhalb des Threads) von CloseHandle(m_hDir) bringt nichts. Das einzige was geht ist ein CloseHandle(m_hDir), gefolgt von irgend einer Aktion in dem Ordner. Also wenn ich jetzt in dem Ordner ne Datei anlege, nachdem ich CloseHandle(m_hDir) aufgerufen habe, beendet sich diese Funktion.<br />
Aber es muss doch irgend eine andere Möglichkeit geben, oder?</p>
<p>Danke im Voraus!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190823/readdirectorychangesw-wie-sauber-beenden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 19:45:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190823.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Aug 2007 12:12:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ReadDirectoryChangesW: wie sauber beenden? on Mon, 27 Aug 2007 12:12:56 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine Schleife in einen Thread ausgelagert, die auf Änderungen innerhalb eines Ordners (synchron) reagiert:</p>
<pre><code class="language-cpp">while(ReadDirectoryChangesW(m_hDir...) { /* tu irgendwas */ }
</code></pre>
<p>Frage: wie beende ich das dann jetzt am besten (wenn mein Programm sich beenden soll)? Denn ReadDirectoryChangesW blockt ja.<br />
Ein Aufruf (außerhalb des Threads) von CloseHandle(m_hDir) bringt nichts. Das einzige was geht ist ein CloseHandle(m_hDir), gefolgt von irgend einer Aktion in dem Ordner. Also wenn ich jetzt in dem Ordner ne Datei anlege, nachdem ich CloseHandle(m_hDir) aufgerufen habe, beendet sich diese Funktion.<br />
Aber es muss doch irgend eine andere Möglichkeit geben, oder?</p>
<p>Danke im Voraus!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1352969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352969</guid><dc:creator><![CDATA[Black Shadow]]></dc:creator><pubDate>Mon, 27 Aug 2007 12:12:56 GMT</pubDate></item><item><title><![CDATA[Reply to ReadDirectoryChangesW: wie sauber beenden? on Mon, 27 Aug 2007 12:19:19 GMT]]></title><description><![CDATA[<p>Wenn du den Thread beenden willst kannst du</p>
<pre><code class="language-cpp">BOOL WINAPI TerminateThread(
  HANDLE hThread,
  DWORD dwExitCode
);
</code></pre>
<p>hernehmen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1352978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352978</guid><dc:creator><![CDATA[XBert]]></dc:creator><pubDate>Mon, 27 Aug 2007 12:19:19 GMT</pubDate></item><item><title><![CDATA[Reply to ReadDirectoryChangesW: wie sauber beenden? on Mon, 27 Aug 2007 12:30:59 GMT]]></title><description><![CDATA[<p>TerminateThread ist wohl grundsätzlich die unsauberste Methode einen Thread zu beenden.</p>
<p>ReadDirectoyChangesW blockiert nur, wenn Du nicht Overlapped I/O verwendest. Und genau das soltest Du aber machen!<br />
Selbst wenn dies teilweise MFC Code ist wird das Prinzip an diesem Beispiel klar:<br />
<a href="http://www.codeproject.com/file/directorychangewatcher.asp" rel="nofollow">http://www.codeproject.com/file/directorychangewatcher.asp</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1352998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352998</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 27 Aug 2007 12:30:59 GMT</pubDate></item><item><title><![CDATA[Reply to ReadDirectoryChangesW: wie sauber beenden? on Mon, 27 Aug 2007 12:49:07 GMT]]></title><description><![CDATA[<p>Was ist an TerminateThread() unsauber ??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353012</guid><dc:creator><![CDATA[XBert]]></dc:creator><pubDate>Mon, 27 Aug 2007 12:49:07 GMT</pubDate></item><item><title><![CDATA[Reply to ReadDirectoryChangesW: wie sauber beenden? on Mon, 27 Aug 2007 12:51:46 GMT]]></title><description><![CDATA[<p>XBert schrieb:</p>
<blockquote>
<p>Was ist an TerminateThread() unsauber ??</p>
</blockquote>
<p>Weil es den entsprechenden Thread abschießt, ohne ihm irgendeine Chance für Aufräumarbeiten zu bieten (da sind potentieelle Speicherlecks wohl dein kleinstes Problem) - sowas macht man nur, wenn alle anderen Möglichkeiten gescheitert sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353014</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 27 Aug 2007 12:51:46 GMT</pubDate></item><item><title><![CDATA[Reply to ReadDirectoryChangesW: wie sauber beenden? on Mon, 27 Aug 2007 12:53:45 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Danke für die fixen antworten :).<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15981">@XBert</a>: Just 4 fun hatte ich davor das mal so gemacht, habe das Handle von _beginthread() an Terminate Thread übergeben, lustigerweise hat sich der Prozess immer noch nicht beendet :D. Abgesehen davon möchte ich schon sauber bleiben :).<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/35992">@Martin</a>: Ja, ich hatte es erst overlapped mit der completion-port-Methode, allerdings hatte ich den Eindruck, dass bei vielen Dateioperationen hier einige Nachrichten verschluckt werden. Das war sicherlich ein Programmierfehler meinerseits. Ich werds dann mal wieder so machen und nach dem Fehler suchen, wenn ich nicht damit zurechtkomme meld ich mich wieder <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</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353019</guid><dc:creator><![CDATA[Black Shadow]]></dc:creator><pubDate>Mon, 27 Aug 2007 12:53:45 GMT</pubDate></item><item><title><![CDATA[Reply to ReadDirectoryChangesW: wie sauber beenden? on Mon, 27 Aug 2007 12:58:13 GMT]]></title><description><![CDATA[<p>@ CStoll:<br />
danke ich habs auch gerade in einem andern Beitrag gelesen (wusst ich ned)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353024</guid><dc:creator><![CDATA[XBert]]></dc:creator><pubDate>Mon, 27 Aug 2007 12:58:13 GMT</pubDate></item><item><title><![CDATA[Reply to ReadDirectoryChangesW: wie sauber beenden? on Mon, 27 Aug 2007 12:59:41 GMT]]></title><description><![CDATA[<p>Ich bin zwar kein WinAPI-Experte, aber sollte es nicht reichen, ein Event zu erstellen, welches ausgelöst wird, wenn der Thread beendet werden soll?<br />
Man kann dann mittels WaitForMultipleObjects auf Änderungen am Filesystem und auf den Event warten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353026</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 27 Aug 2007 12:59:41 GMT</pubDate></item><item><title><![CDATA[Reply to ReadDirectoryChangesW: wie sauber beenden? on Mon, 27 Aug 2007 13:00:32 GMT]]></title><description><![CDATA[<p>Wenn dein Programm sich eh beendet, sind irgendwelche Speicherlecks auch egal, weil der Speicher deines Prozesses dann eh freigegeben wird vom Betriebssystem. Und da du keine kritischen Funktionen verwendest, ist TerminateThread an dieser Stelle nicht so fatal, wie einige es darstellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353027</guid><dc:creator><![CDATA[SkriptProfessor]]></dc:creator><pubDate>Mon, 27 Aug 2007 13:00:32 GMT</pubDate></item><item><title><![CDATA[Reply to ReadDirectoryChangesW: wie sauber beenden? on Mon, 27 Aug 2007 13:02:55 GMT]]></title><description><![CDATA[<p>Joe_M. schrieb:</p>
<blockquote>
<p>Ich bin zwar kein WinAPI-Experte, aber sollte es nicht reichen, ein Event zu erstellen, welches ausgelöst wird, wenn der Thread beendet werden soll?<br />
Man kann dann mittels WaitForMultipleObjects auf Änderungen am Filesystem und auf den Event warten.</p>
</blockquote>
<p>Ja so hätte ich es auch gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353028</guid><dc:creator><![CDATA[SkriptProfessor]]></dc:creator><pubDate>Mon, 27 Aug 2007 13:02:55 GMT</pubDate></item><item><title><![CDATA[Reply to ReadDirectoryChangesW: wie sauber beenden? on Mon, 27 Aug 2007 13:31:49 GMT]]></title><description><![CDATA[<p>SkriptProfessor schrieb:</p>
<blockquote>
<p>Wenn dein Programm sich eh beendet, sind irgendwelche Speicherlecks auch egal</p>
</blockquote>
<p>Mit der Einstellung kannst du eventuell an kleine Fun-Anwendungen herangehen - in &quot;echten&quot; Anwendungen ist sowas tödlich (btw, Speicher ist nicht das einzige, was bei so einem erzwungenen Absturz zurückbleibt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353047</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 27 Aug 2007 13:31:49 GMT</pubDate></item><item><title><![CDATA[Reply to ReadDirectoryChangesW: wie sauber beenden? on Mon, 27 Aug 2007 14:24:22 GMT]]></title><description><![CDATA[<p>SkriptProfessor schrieb:</p>
<blockquote>
<p>Wenn dein Programm sich eh beendet, sind irgendwelche Speicherlecks auch egal, weil der Speicher deines Prozesses dann eh freigegeben wird vom Betriebssystem. Und da du keine kritischen Funktionen verwendest, ist TerminateThread an dieser Stelle nicht so fatal, wie einige es darstellen.</p>
</blockquote>
<p>Dann ist TerminateThread immer noch schlechter, als den Prozess zu beenden. Wen man TerminateThread aufruft und der Thread gerade eine CRT Ressource verwendet läuft nicht einmal mehr das beenden des Programmes.<br />
Dann lieber einfach den Thread, Thread sein lassen und das Programm verlassen, das ist immer noch sauberer als TerminateThread zu verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353081</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 27 Aug 2007 14:24:22 GMT</pubDate></item><item><title><![CDATA[Reply to ReadDirectoryChangesW: wie sauber beenden? on Mon, 27 Aug 2007 14:28:50 GMT]]></title><description><![CDATA[<p>Nagut da hast du Recht Martin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353084</guid><dc:creator><![CDATA[SkriptProfessor]]></dc:creator><pubDate>Mon, 27 Aug 2007 14:28:50 GMT</pubDate></item></channel></rss>