<?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[Funktionsschachtelung?]]></title><description><![CDATA[<p>Ich hab ien Szenrio, das sieht so aus: Ich habe eine Klasse Logik und eine Klasse EventCatcher, Logik wird initialisiert und speichert sich einen Zustand und sagt der EventCatcher Klasse, fange EventX, wenn EventX gefangen wird, bekommt Logik eine Meldung über eine Methode &quot;EventDa&quot;, die Klasse weiß welches Event erwartet wird, weil Sie sich den Zustand speichert und reagiert in EventDa entsprechend, dass die dem EventCatcher die anweisung schickt: Fange EventY, wenn dieses Event gefangen wird,wird wieder EventDa aufgerufen und das ganze Spiel von vorne.</p>
<p>Ich hab nun zwei Eigenschaften und ich weiß nicht, ob ich glücklich mit denen bin, zum einen habe ich einen Zustandsautomaten gebastelt, der immer nur von Zustand zu Zustand springt, was sich wohl nicht verhindern lässt.</p>
<p>Zum anderen gefällt mir die Ausführungsreihenfolge überhaupt nicht.<br />
Gibt das nicht mit der Zeit Probleme? Ich schachtel nämlich auf ewig Methoden in einander.</p>
<p>Logik.init() ruft E.catchX(), E fängt und sendet Meldung an Logik.EventDa(), EventDa scheckt Zustand und ruft Methode E.catchY(), E fängt und sendet Meldung an Logik.EventDa() usw.</p>
<p>Birgt das nicht Probleme? In meinem Beispiel sind das synchrone Aufrufe, dh das System wartet bis Event da ist (also nicht gethreaded), funktioniert ungefähr wie cin.getline(); das friert ja die Abfolge auch ein. Damit hab ich eine EventDa methode die in sich selbst E aufruft und E ruft wieder EventDa auf und dies wiederum E, aber keine der Methoden beendet sind wirklich, gibt das nicht irgendwann Probleme?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/196494/funktionsschachtelung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 14:15:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/196494.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Oct 2007 15:00:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionsschachtelung? on Tue, 30 Oct 2007 15:00:37 GMT]]></title><description><![CDATA[<p>Ich hab ien Szenrio, das sieht so aus: Ich habe eine Klasse Logik und eine Klasse EventCatcher, Logik wird initialisiert und speichert sich einen Zustand und sagt der EventCatcher Klasse, fange EventX, wenn EventX gefangen wird, bekommt Logik eine Meldung über eine Methode &quot;EventDa&quot;, die Klasse weiß welches Event erwartet wird, weil Sie sich den Zustand speichert und reagiert in EventDa entsprechend, dass die dem EventCatcher die anweisung schickt: Fange EventY, wenn dieses Event gefangen wird,wird wieder EventDa aufgerufen und das ganze Spiel von vorne.</p>
<p>Ich hab nun zwei Eigenschaften und ich weiß nicht, ob ich glücklich mit denen bin, zum einen habe ich einen Zustandsautomaten gebastelt, der immer nur von Zustand zu Zustand springt, was sich wohl nicht verhindern lässt.</p>
<p>Zum anderen gefällt mir die Ausführungsreihenfolge überhaupt nicht.<br />
Gibt das nicht mit der Zeit Probleme? Ich schachtel nämlich auf ewig Methoden in einander.</p>
<p>Logik.init() ruft E.catchX(), E fängt und sendet Meldung an Logik.EventDa(), EventDa scheckt Zustand und ruft Methode E.catchY(), E fängt und sendet Meldung an Logik.EventDa() usw.</p>
<p>Birgt das nicht Probleme? In meinem Beispiel sind das synchrone Aufrufe, dh das System wartet bis Event da ist (also nicht gethreaded), funktioniert ungefähr wie cin.getline(); das friert ja die Abfolge auch ein. Damit hab ich eine EventDa methode die in sich selbst E aufruft und E ruft wieder EventDa auf und dies wiederum E, aber keine der Methoden beendet sind wirklich, gibt das nicht irgendwann Probleme?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394702</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Tue, 30 Oct 2007 15:00:37 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsschachtelung? on Tue, 30 Oct 2007 15:08:43 GMT]]></title><description><![CDATA[<p>Ja, so eine Endlos-Rekursion ist eher ungünstig. Da solltest du eher eine zentrale Verarbeitungsschleife einbauen (z.B. im Zustandsautomat):</p>
<pre><code class="language-cpp">void main_loop()
{
  while(!ende)
  {
    catch_event(active_state);
  }
}

void event_coming()
{
  active_state = get_next_state();
  return;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1394703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394703</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 30 Oct 2007 15:08:43 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsschachtelung? on Tue, 30 Oct 2007 15:12:41 GMT]]></title><description><![CDATA[<p>Naja das Problem ist wenn ich dann aber mal den Event Catcher asynchron laufen lasse, wie anstatt cin.getline(); das Äquivalent in einer GUI wo das Programm nicht einfriert während man auf den Namen wartet, dann entfällt dies Problem, ich weiß aber nicht, ob der EventCatcher asynchron oder nicht läuft.<br />
Ich weiß gerade nicht, wie ich aus dieser Rekursion rauskomme</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394705</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Tue, 30 Oct 2007 15:12:41 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsschachtelung? on Tue, 30 Oct 2007 15:18:29 GMT]]></title><description><![CDATA[<p>Wenn du nicht weißt, ob der Event-Catcher synchron läuft, ist es besser, davon auszugehen - schon weil du diese Lösung auch mit einem asynchronen System einsetzen kannst.</p>
<p>Edit:</p>
<blockquote>
<p>Ich weiß gerade nicht, wie ich aus dieser Rekursion rauskomme</p>
</blockquote>
<p>Wie ich schon sagte - du solltest nicht aus der &quot;EventDa&quot;-Methode den nächsten Event anstarten, sondern aus dem Hauptprogramm heraus, nachdem die EventDa() zurückgekehrt ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394707</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 30 Oct 2007 15:18:29 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsschachtelung? on Tue, 30 Oct 2007 15:21:36 GMT]]></title><description><![CDATA[<p>Wie meinst du das? Ich denke doch eher nicht?</p>
<p>Wenn ich davon ausgehe, dass EventCatcher synchron ist, weiß ich dass der Aufruf quasi so aussieht:</p>
<pre><code class="language-cpp">while(true){int wert = E.getEvent();
// Nutze wert
}
</code></pre>
<p>Bei asynchronem EventCatcher geht das ja nicht, wenn getEvent teil eines threads ist, ist nicht gesagt, dass getEvent ein Ergebnis liefert, deswegen sieht der Code dann ja so aus:</p>
<pre><code class="language-cpp">void init(){
 E.getEvent();
}

void EventDa(int wert){
 // Hier antwortet E erst
}
</code></pre>
<p>In dem einen Beispiel ist keine Rechenzeit vergangen bis der Wert da ist, bei dem zweiten ist Rechenzeit vergangen.</p>
<p>Ich hatte das vor Jahren mal, wir sollten ein Programm schreiben was als User Interface die Konsole genommen hat (erstes Beispiel) danach sollten wir einen GUI nehmen und erstes Beispiel konnte nicht mehr funktionieren und man musste alles was vorher einen Rückgabewert hatte umschreiben in Beispiel 2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394708</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Tue, 30 Oct 2007 15:21:36 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsschachtelung? on Tue, 30 Oct 2007 15:35:17 GMT]]></title><description><![CDATA[<p>Wenn du ein asynchrones System hast, mußt du ohnehin auf das Ergebnis warten - zur Not in deinem Programm. Ergo kannst du dir um diesen Aufruf einen synchronen Wrapper packen (natürlich brauchst du irgendeine Abfrage &quot;ist jetzt ein Event eingetroffen?&quot;). Andersherum brauchst du Miltithreading, um einen synchronen Aufruf aus dem Programm herauszukoppeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394715</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 30 Oct 2007 15:35:17 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsschachtelung? on Tue, 30 Oct 2007 15:37:41 GMT]]></title><description><![CDATA[<p>Ja, das war meine Befürchtung um die einfache Konsole asynchron zu machen müsste ich den Aufruf der Konsole in einen Thread packen, nicht wahr? Das wäre unschön, jetzt mit Threads anzufangen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394717</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Tue, 30 Oct 2007 15:37:41 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsschachtelung? on Wed, 31 Oct 2007 07:30:12 GMT]]></title><description><![CDATA[<p>Ja, um mehrere Sachen parallel zu erledigen, brauchst du Threads - eventuell auch &quot;nur&quot; Interrupt-Mechanismen.</p>
<p>btw, welche Seite des Systems schreibst du eigentlich - den Event-Catcher oder das Tool, das ihn verwenden will?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394985</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 31 Oct 2007 07:30:12 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsschachtelung? on Wed, 31 Oct 2007 10:12:56 GMT]]></title><description><![CDATA[<p>Beides, aber mit dem Augenmerk, dass der EventCatcher die Anforderung erfüllen muss, synchron oder asynchron zu sein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395073</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Wed, 31 Oct 2007 10:12:56 GMT</pubDate></item></channel></rss>