<?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[Synchronize() und rekursive Funktion]]></title><description><![CDATA[<p>Hallo Kollegen,</p>
<p>ich habe ein Programm geschrieben, das ein Verzeichnis ausliest. Wenn das ein Unterverzeichnis entdeckt wird, wird die Funktion, die das Verzeichnis ausliest, erneut aufgerufen (rekursiv):</p>
<pre><code class="language-cpp">void __fastcall TReadDirTree::ScanDir(AnsiString Verzeichnispfad)
{
    //Verzeichnis auslesen

    //ein unterverzeichnis gefunden
    ScanDir(Unterverzeichnispfad);
}
</code></pre>
<p>Das hat funktioniert. Jetzt wollte ich dieses Programm so abändern, das dieses Verzeichnisscannen in einem Thread läuft. Man soll ja den Code des Threads in der Synchronize-Methode ausführen. Dieser Kann man ja aber keine Funktion mit Parametern übergeben.</p>
<pre><code class="language-cpp">Synchronize(&amp;ScanDir); //richtig
Synchronize(&amp;ScanDir(Verzeichnispfad)); //nicht zulässig
</code></pre>
<p>jetzt meine frage:</p>
<p>Wie löse ich das Problem? Wie rufe ich die Funktion recursive auf, ohne einen Parameter übergeben zu dürfen? Mit einer globalen Variable / Klassenmember bekomme ich das ja nicht hin, wenn sich der Wert der Variable ständig ändert, wärend die funktion mehrfach abgearbeitet wird, oder?</p>
<p>Ich habe bestimmt nur einen Denkfehler...</p>
<p>vielen Danke für eure Hilfe im Voraus</p>
<p>mfg Stephan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/194947/synchronize-und-rekursive-funktion</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 06:50:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/194947.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Oct 2007 10:02:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Synchronize() und rekursive Funktion on Fri, 12 Oct 2007 10:02:34 GMT]]></title><description><![CDATA[<p>Hallo Kollegen,</p>
<p>ich habe ein Programm geschrieben, das ein Verzeichnis ausliest. Wenn das ein Unterverzeichnis entdeckt wird, wird die Funktion, die das Verzeichnis ausliest, erneut aufgerufen (rekursiv):</p>
<pre><code class="language-cpp">void __fastcall TReadDirTree::ScanDir(AnsiString Verzeichnispfad)
{
    //Verzeichnis auslesen

    //ein unterverzeichnis gefunden
    ScanDir(Unterverzeichnispfad);
}
</code></pre>
<p>Das hat funktioniert. Jetzt wollte ich dieses Programm so abändern, das dieses Verzeichnisscannen in einem Thread läuft. Man soll ja den Code des Threads in der Synchronize-Methode ausführen. Dieser Kann man ja aber keine Funktion mit Parametern übergeben.</p>
<pre><code class="language-cpp">Synchronize(&amp;ScanDir); //richtig
Synchronize(&amp;ScanDir(Verzeichnispfad)); //nicht zulässig
</code></pre>
<p>jetzt meine frage:</p>
<p>Wie löse ich das Problem? Wie rufe ich die Funktion recursive auf, ohne einen Parameter übergeben zu dürfen? Mit einer globalen Variable / Klassenmember bekomme ich das ja nicht hin, wenn sich der Wert der Variable ständig ändert, wärend die funktion mehrfach abgearbeitet wird, oder?</p>
<p>Ich habe bestimmt nur einen Denkfehler...</p>
<p>vielen Danke für eure Hilfe im Voraus</p>
<p>mfg Stephan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1383563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1383563</guid><dc:creator><![CDATA[menel]]></dc:creator><pubDate>Fri, 12 Oct 2007 10:02:34 GMT</pubDate></item><item><title><![CDATA[Reply to Synchronize() und rekursive Funktion on Fri, 12 Oct 2007 10:10:44 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also ich hätte die Funktion in Execute() aufgerufen.</p>
<p>Synchronize() nutzen wenn Änderungen an Aktualisierungen an Objekten anstehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1383571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1383571</guid><dc:creator><![CDATA[Heinzelmännchen]]></dc:creator><pubDate>Fri, 12 Oct 2007 10:10:44 GMT</pubDate></item><item><title><![CDATA[Reply to Synchronize() und rekursive Funktion on Fri, 12 Oct 2007 10:15:02 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Um die Antwort von Heinzelmännchen noch zu präzisieren :<br />
Nicht Synchronize soll die Arbeitsfunktion aufrufen, sondern die Arbeitsfunktion soll Synchronize aufrufen wenn es etwas zu synchronizieren gibt.<br />
Siehe auch das <a href="http://bcb-tutorial.c-plusplus.net/Thread/index.html" rel="nofollow">Forums-Tutorial</a>.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1383576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1383576</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 12 Oct 2007 10:15:02 GMT</pubDate></item><item><title><![CDATA[Reply to Synchronize() und rekursive Funktion on Fri, 12 Oct 2007 10:40:20 GMT]]></title><description><![CDATA[<p>Also Synchronize nicht generell immer einsetzen, sondern nur, wenn auf Daten zugegriffen wird, auf die evtl. noch jemand anders zugreift. Hab mich da wohl von den vielen &quot;Synchronize or Die&quot; Sprüchen hypersensibilisieren lassen ;o)</p>
<p>danke euch vielmals</p>
<p>PS: der Erstaufruf von der Funktion erfolgt natürlich in Execute().<br />
Nur wenn ich die Funktion rekursiv erneut aufrufe, muss ich ja wieder Synchronize verwenden. Das war mein Denkfehler. Ich brauch für so einen Algorithmus ja gar kein Sync. Danke euch nochmal</p>
<pre><code class="language-cpp">void __fastcall TReadDirTree::Execute()
{
	//---- Hier den Thread-Code plazieren----

	Synchronize(&amp;ScanDir);
}
</code></pre>
<p>mfg Stephan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1383601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1383601</guid><dc:creator><![CDATA[menel]]></dc:creator><pubDate>Fri, 12 Oct 2007 10:40:20 GMT</pubDate></item></channel></rss>