<?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[mainloop fuer Konsolenanwendung zickt]]></title><description><![CDATA[<p>Servus,</p>
<p>ich verstehe gerade nicht, wieso ich nicht wieder in meinem main-loop zurückkomme?<br />
Hm, komisch ich habe versucht mein Vorgehen in Python auf C++ zu übertragen aber das klappt so nicht, kann es sein, dass cin was macht, was ich nicht sehe?</p>
<p>Hie ein kleines Beispiel, ich will eine Konsolen-Nutzeroberfläche bauen, ein Event ist eine Eingabe.</p>
<pre><code class="language-cpp">Geloescht, da es nicht mehr aktuell war, und das zweite Code-Beispiel von mir das Problem besser aufs Wesentliche beschränkt.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/292388/mainloop-fuer-konsolenanwendung-zickt</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 00:14:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292388.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Sep 2011 17:24:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to mainloop fuer Konsolenanwendung zickt on Thu, 08 Sep 2011 21:59:50 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>ich verstehe gerade nicht, wieso ich nicht wieder in meinem main-loop zurückkomme?<br />
Hm, komisch ich habe versucht mein Vorgehen in Python auf C++ zu übertragen aber das klappt so nicht, kann es sein, dass cin was macht, was ich nicht sehe?</p>
<p>Hie ein kleines Beispiel, ich will eine Konsolen-Nutzeroberfläche bauen, ein Event ist eine Eingabe.</p>
<pre><code class="language-cpp">Geloescht, da es nicht mehr aktuell war, und das zweite Code-Beispiel von mir das Problem besser aufs Wesentliche beschränkt.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2116846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2116846</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Thu, 08 Sep 2011 21:59:50 GMT</pubDate></item><item><title><![CDATA[Reply to mainloop fuer Konsolenanwendung zickt on Thu, 08 Sep 2011 17:42:11 GMT]]></title><description><![CDATA[<p>Ich würde das ganz anders angehen. Mach eine allgemeine Klasse, die Konsolen-Befehle bearbeiten kann und bei der du Handler für Befehle registrieren kannst.<br />
In etwa so:</p>
<pre><code class="language-cpp">class console
{
    std::map&lt;std::string, std::unique_ptr&lt;signal_type&gt;&gt; signals;
    bool run;

public:
    typedef void callback_signature(console&amp;, const std::vector&lt;std::string&gt;&amp;);
    typedef boost::signals::signal&lt;callback_signature&gt; signal_type;
    typedef std::function&lt;callback_signature&gt; callback_type;
    typedef boost::signals::connection connection_type;

    console()
        : run(true)
    {}

    connection_type register_callback(const std::string&amp; cmd, callback_type cb)
    {
        // füge callback ein
    }

    void run_loop()
    {
        while(run)
        {
            std::string line;
            std::getline(std::cin, line);

            std::vector&lt;std::string&gt; args;
            std::ostringstream oss(std::move(line));

            while(oss &gt;&gt; line)
                args.push_back(std::move(line));

            auto iter = signals.find(args[0]);

            if(iter != signals.end)
                (*iter-&gt;second)(*this, args);
        }
    }

    void stop()
    {
        run = false;
    }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2116856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2116856</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 08 Sep 2011 17:42:11 GMT</pubDate></item><item><title><![CDATA[Reply to mainloop fuer Konsolenanwendung zickt on Thu, 08 Sep 2011 18:16:13 GMT]]></title><description><![CDATA[<p>Okay, erstmal Danke, über deine Herangehensweise muss ich mal nachdenken, das scheint in jedem Fall geschickter zu sein. Dennoch würde ich gern wissen warum ich nicht aus meinem Hauptloop zurückkomme Ich habe meinen Code mal korrigiert und etwas vereinfacht, damit das Problem schneller erkennbar wird.</p>
<pre><code class="language-cpp">class Tui {

public:
    bool run;

    Tui() {}
    int start();
    int stop();
    // Eventprototypen
    int doActionOne();
};

// Events
inline int Tui::doActionOne()
{
    // Konfigurieren
    std::cout &lt;&lt; &quot;* -&gt; Eingabe des ActionOne, 'RETURN' zum Absenden; 'q' zum Beenden.\n&quot;;
    std::cout &lt;&lt; &quot;* Eingabe [String]:\n&quot;;
    std::string stringToCompute = &quot;&quot;;
    std::cin &gt;&gt; stringToCompute;

    // Weiterleiten
    if ( stringToCompute == &quot;q&quot; )
    {
        std::cout &lt;&lt; &quot; q in ActionOne erkannt\n&quot;;
        stop();
    }
    else 
    {
        // Logik Griff ins Model
        double res = 0.45;   
        // Antwort
        std::cout &lt;&lt; &quot;* [Eingabe: &quot;;
        std::cout &lt;&lt; stringToCompute;
        std::cout &lt;&lt; &quot;]: \n&quot;;
        std::cout &lt;&lt; &quot;* &quot;;
        std::cout &lt;&lt; res;
        std::cout &lt;&lt; &quot;\n&quot;;
        std::cout &lt;&lt; &quot;* Zurueck mit beliebiger Taste.\n&quot;;
        std::string event;
        std::cin &gt;&gt; event;
        std::cout &lt;&lt; &quot;Eventeingabe:&quot; &lt;&lt; event &lt;&lt; &quot;\n&quot;;
    }

    // korrektes Ende 
    std::cout &lt;&lt; &quot;doActionOne() - korrekt gelaufen.\n&quot;;
    return 0;
}

inline int Tui::start()
{
    run = true;
    while ( run )
    {
        std::cout &lt;&lt; &quot;\n&quot;;
        std::cout &lt;&lt; &quot;******************** INFO [Konsolen-Interface] ********************************\n&quot;;
        std::cout &lt;&lt; &quot;* ............................................................................ \n&quot;;
        std::cout &lt;&lt; &quot;*** Hauptmenue *** ........................................................... \n&quot;;
        std::cout &lt;&lt; &quot;* q  - Anwendung beenden\n&quot;;
        std::cout &lt;&lt; &quot;* A0 - ActionOne ...\n&quot;;
        std::cout &lt;&lt; &quot;*** .......................................................................... \n&quot;;
        std::cout &lt;&lt; &quot;* Eingabe: \n&quot;;
        std::string event = &quot;&quot;;
        std::cin &gt;&gt; event;
        std::cout &lt;&lt; &quot;Eventeingabe: &quot; &lt;&lt; event &lt;&lt; &quot;\n&quot;;
        if (event == &quot;q&quot;) {
            std::cout &lt;&lt; &quot;mainloop q\n&quot;;
            stop();
        } else if (event == &quot;A0&quot;) {
            std::cout &lt;&lt; &quot;Event start A0 start\n&quot;;
            doActionOne();
            std::cout &lt;&lt; &quot;Event start A0 ende - nichts, Hauptmenue\n&quot;;
        } else {
            std::cout &lt;&lt; &quot;Event nicht erkannt - nichts, Hauptmenue\n&quot;;
        }
    }
    std::cout &lt;&lt; &quot;* ... raus aus while ... beende Anwendung\n&quot;;
    return 0;
}

inline int Tui::stop(){
    this-&gt;run = false;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2116894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2116894</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Thu, 08 Sep 2011 18:16:13 GMT</pubDate></item><item><title><![CDATA[Reply to mainloop fuer Konsolenanwendung zickt on Thu, 08 Sep 2011 18:55:44 GMT]]></title><description><![CDATA[<p>Das gibts doch nicht ... habe nun etwas gelesen und es sieht mir so aus, dass das angeblich komplexer als erwartet ist, gar plattformabhängig. Ich dachte erst, dass ist ein absolutes Anfängerproblem das jeder schon x-mal gelöst hat. Laufen soll das Tui auf Linux, falls das für die Lösung eine Rolle spielt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2116921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2116921</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Thu, 08 Sep 2011 18:55:44 GMT</pubDate></item><item><title><![CDATA[Reply to mainloop fuer Konsolenanwendung zickt on Thu, 08 Sep 2011 21:46:25 GMT]]></title><description><![CDATA[<p>Könntest du etwas mehr Informationen liefern? Was passiert? Was erwartest du? Wo erwartest du was, was nicht passiert ist? Schon mal mit dem Debugger durchgegangen?</p>
<p>Die wenigsten haben wohl Lust, den Code durchzugehen und selber auf den möglichen Fehler zu treffen, den du irgendwo siehst.</p>
<p>Wo ist das Problem? Ausführlich bitte!</p>
<p>Siehe auch Punkte 6, 8 und 9:<br />
<a href="http://www.c-plusplus.net/forum/200753" rel="nofollow">http://www.c-plusplus.net/forum/200753</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117020</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 08 Sep 2011 21:46:25 GMT</pubDate></item><item><title><![CDATA[Reply to mainloop fuer Konsolenanwendung zickt on Thu, 08 Sep 2011 21:58:20 GMT]]></title><description><![CDATA[<p>Sodala,</p>
<p>in der main()-Funktion habe ich diesen Aufruf:</p>
<pre><code class="language-cpp">Tui tui;
        int rcode = tui.start();
        // komplett raus
</code></pre>
<p>Der Code aus meinem Beispiel direkt oben drüber ist denke ich lauffähig und man kann es gut nachvollziehen, das Code-Beispiel im Anfangspost ist für die Katz und ich werde es rauslöschen, damit keiner Zeit vertrödelt, dies durchzusehen.</p>
<p>Was passiert? Ich will, dass das Programm nach der Aufforderung 'Weiter mit beliebigem Tastendruck wieder im Hauptloop der Tui-Klasse landet, also in der Methode start() - das passiert aber nicht, meine Shell sieht so aus, dass nicht die Hauptmenueansicht erscheint, sondern einfach der Cursor eine Zeile weiter nach unten springt. Es sieht so aus, als ob die Rücksprungadresse den Loop nicht mehr findet. Das führt zu meinen Verdacht, dass der Loop der Methode start() nicht 'wartet'.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117028</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Thu, 08 Sep 2011 21:58:20 GMT</pubDate></item><item><title><![CDATA[Reply to mainloop fuer Konsolenanwendung zickt on Thu, 08 Sep 2011 22:03:51 GMT]]></title><description><![CDATA[<p>Jay1980 schrieb:</p>
<blockquote>
<p>Es sieht so aus, als ob die Rücksprungadresse den Loop nicht mehr findet. Das führt zu meinen Verdacht, dass der Loop der Methode start() nicht 'wartet'.</p>
</blockquote>
<p>Nach &quot;* Zurueck mit beliebiger Taste.\n&quot; wird ja noch einmal cin &gt;&gt; event aufgerufen, da musst du irgendwas eingeben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> (Also Text, führende Spaces werden ignoriert!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117030</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 08 Sep 2011 22:03:51 GMT</pubDate></item><item><title><![CDATA[Reply to mainloop fuer Konsolenanwendung zickt on Thu, 08 Sep 2011 22:14:13 GMT]]></title><description><![CDATA[<p>Das war wieder so etwas ... ich hack da rum und hau mir Blasen durchs Drücken auf die Return-Taste .... aber die nimmt cin nicht ... oh mei, manchmal ...</p>
<p>Danke ... so nun kann es endlich weitergehen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117035</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Thu, 08 Sep 2011 22:14:13 GMT</pubDate></item></channel></rss>