<?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[Durch Funktion über Fortschritt informiert werden (z.B. Callback?)]]></title><description><![CDATA[<p>Es existiert folgende Funktion, die für sich alleine stehend übersetzt und projektübergreifend genutzt werden kann:</p>
<pre><code>/* findSomething testet 255 Adressen auf Antwort und liefert einen Vektor
 * mit den verfügbaren Adressen zurück, z.B. 13,14,180,253.
*/
std::vector&lt;int&gt; findSomething() {
	for (int i = 0; i &lt; 255; ++i) {
    // [...]
    }
}
</code></pre>
<p>Jetzt dauert das aber ein wenig, so dass es sich lohnt, bei einer GUI dem Anwender den Fortschritt mitzuteilen. Z.B. so:</p>
<blockquote>
<p>Teste Adresse 0... keine Antwort<br />
Teste Adresse 1... Antwort</p>
</blockquote>
<p>Oder ein Fortschrittsbalken (oder beides).</p>
<p>Nur wie kann ich das realisieren, dass ich bei Bedarf Rückmeldung von der Funktion bekommen. Ein Ansatz war Folgender:</p>
<pre><code>std::vector&lt;int&gt; findSomething(void(*pFunc_TryingAddr)(int) = 0, void(*pFunc_FoundDevice)(int) = 0) {
	for (int i = 0; i &lt; 255; ++i) {
		if (pFunc_TryingAddr) {
			pFunc_TryingAddr(i);
		}
        // [...]
			if (bSuccess &amp;&amp; pFunc_FoundDevice) {
				pFunc_FoundDevice(i);
			}
            // vec.push_back(i);
    }
}
</code></pre>
<p>Aber irgendwie fühlt sich das für mich nicht &quot;optimal&quot; an. Was wären eure Ideen? Oberstes Ziel ist, das die Suche komplett entkoppelt bleibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/328133/durch-funktion-über-fortschritt-informiert-werden-z-b-callback</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Jul 2026 12:02:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/328133.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 24 Sep 2014 13:25:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Durch Funktion über Fortschritt informiert werden (z.B. Callback?) on Wed, 24 Sep 2014 13:25:22 GMT]]></title><description><![CDATA[<p>Es existiert folgende Funktion, die für sich alleine stehend übersetzt und projektübergreifend genutzt werden kann:</p>
<pre><code>/* findSomething testet 255 Adressen auf Antwort und liefert einen Vektor
 * mit den verfügbaren Adressen zurück, z.B. 13,14,180,253.
*/
std::vector&lt;int&gt; findSomething() {
	for (int i = 0; i &lt; 255; ++i) {
    // [...]
    }
}
</code></pre>
<p>Jetzt dauert das aber ein wenig, so dass es sich lohnt, bei einer GUI dem Anwender den Fortschritt mitzuteilen. Z.B. so:</p>
<blockquote>
<p>Teste Adresse 0... keine Antwort<br />
Teste Adresse 1... Antwort</p>
</blockquote>
<p>Oder ein Fortschrittsbalken (oder beides).</p>
<p>Nur wie kann ich das realisieren, dass ich bei Bedarf Rückmeldung von der Funktion bekommen. Ein Ansatz war Folgender:</p>
<pre><code>std::vector&lt;int&gt; findSomething(void(*pFunc_TryingAddr)(int) = 0, void(*pFunc_FoundDevice)(int) = 0) {
	for (int i = 0; i &lt; 255; ++i) {
		if (pFunc_TryingAddr) {
			pFunc_TryingAddr(i);
		}
        // [...]
			if (bSuccess &amp;&amp; pFunc_FoundDevice) {
				pFunc_FoundDevice(i);
			}
            // vec.push_back(i);
    }
}
</code></pre>
<p>Aber irgendwie fühlt sich das für mich nicht &quot;optimal&quot; an. Was wären eure Ideen? Oberstes Ziel ist, das die Suche komplett entkoppelt bleibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2418979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2418979</guid><dc:creator><![CDATA[Designer5467]]></dc:creator><pubDate>Wed, 24 Sep 2014 13:25:22 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Funktion über Fortschritt informiert werden (z.B. Callback?) on Wed, 24 Sep 2014 15:08:39 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//Annahme: Die Ursprungsfunktion sieht ungefähr so aus
std::vector&lt;int&gt; findSomething() {
	std::vector&lt;int&gt; results;
	for (int i = 0; i &lt; 255; ++i) {
		if (tryAddress(i)) {
			results.push_back(i);
		}
	}
	return results;
}

//Verallgemeinerung der Rückgabemethode:
template &lt;class AddressCallback&gt;
void findSomething2(AddressCallback handle_result) {
	for (int i = 0; i &lt; 255; ++i) {
		if (tryAddress(i)) {
			handle_result(i);
		}
	}
}

//eine Zusatzinformation über einen zweiten Callback
template &lt;class AddressCallback1, class AddressCallback2&gt;
void findSomething3(AddressCallback1 handle_result, AddressCallback2 handle_trying) {
	for (int i = 0; i &lt; 255; ++i) {
		handle_trying(i);
		if (tryAddress(i)) {
			handle_result(i);
		}
	}
}

//das zweite Argument kann leicht optional gemacht werden
template &lt;class AddressCallback&gt;
void findSomething3(AddressCallback handle_result) {
	findSomething3(handle_result, [](int) { /*ignore*/ });
}

int main()
{
	std::vector&lt;int&gt; results;
	findSomething3(
		[&amp;results](int result)
		{
			results.push_back(result);
		},
		[](int trying)
		{
			//...
		}
	);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2419008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2419008</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Wed, 24 Sep 2014 15:08:39 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Funktion über Fortschritt informiert werden (z.B. Callback?) on Thu, 25 Sep 2014 11:26:32 GMT]]></title><description><![CDATA[<p>Ok, mit deinem Beispiel sind jetzt auch Lambdas bei mir angekommen. Ich finde deine Lösung sehr elegant. Viel eleganter als meine. Und jetzt wo ich lambdas grob verstanden habe, kann mein Auge auch die Syntax erfassen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Dein Vorschlag wird so übernommen. Du hast mir sehr geholfen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2419140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2419140</guid><dc:creator><![CDATA[Designer5467]]></dc:creator><pubDate>Thu, 25 Sep 2014 11:26:32 GMT</pubDate></item></channel></rss>