Mehrere Schleifen/Prozesse gleichzeitig



  • Hy!

    Also ich bin noch Anfänger und desswegen müsst ihr meine "primitiven" Fragen entschuldigen, aber ich programmier gerade ein Spiel und dazu wäre es fein, wenn zwei for-Schleifen gleichzeitig ablaufen würden. Ist das überhaupt möglich?

    mfg Christian



  • Nein, ist nicht möglich. Aber du kannst dein Problem auf andere Art und Weise lösen.
    Bsp: Statt einer Schleife, die ein Männchen bewegt und einer Schleife die ein Schiff bewegt (= 2 Schleifen), kannst du _eine_ Schleife machen, in der zuerst das Männchen und dann das Schiff bewegt wird.

    Oder du benutze Threads. Dadurch ergeben sich aber andere Probleme. Schau dir zu dem Thema am besten mal boost.thread an. Für so einfache Sachen wie 2 for Schleifen, solltest du Threads aber vermeiden und, wenn nicht jemand was schlaueres sagt, meinen ersten Vorschlag nehmen :).



  • Hallo.

    Also mein Problem sieht genau so aus:

    Das Programm sollte ein Spiel werden (Ein irrsinnig primitives Skifahr-Spiel).

    Jetzt sollten sich die Tore auf die Figur hin zubewegen, und man soll die Figur nach Links/rechts steuern können. Die Steuerung von der Figur ist in einer For-Schleife(Endlosschleife). Wenn ich die Bewegung von den Toren in dieselbe packe, bewegen sich die Tore nur auf die Figur zu, wenn man die Figur nach links/rechts bewegt.

    Aber ich hab schon eine Idee, wie ich dass lösen kann, aber ich weiß nicht ob es funzt.

    mfg Christian



  • klingt nach dem prinzip des tetris-spiels (suche vielleicht mal danach)



  • Hä? So in etwa?

    while(nicht_verloren)
    {
        bewege_tore();
        male_bildschirm();
        if(kbhit())
        werte_tastendruck_aus(cin.get());
    };
    

    kbhit ist glaub ich in conio.h, ist aber nicht standardisiert.



  • Klar kann man zwei Schleifen gleichzeitig laufen lassen. Es ist aber nicht ganz trivial. Die Technik nennt sich Multithreading. Du packst jede Schleife in einen Thread und lässt die Threads parallel ablaufen. Wirf mal nen Blick auf www.boost.org/libs/thread

    Kompliziert wird es eigentlich erst, wenn die Threads auf die gleichen Ressourcen zugreifen müssen; dann musst du z.B. koordinieren, dass Thread 1 nicht in die Ressource schreibt, aus der Thread 2 gerade liest usw. In deinem Fall dürfte ein Mutex allerdings ausreichen, bzw. mit der boost-library halt ein lock im block scope. Allerdings rate ich dir, mal in der Bibliothek deiner Wahl vorbeizuschauen und mir ein Buch darüber zu Gemüte zu führen, das könnte beim Verständnis helfen.

    Unter Umständen könnte es sogar Sinn machen, das ganze in drei Threads aufzuteilen - zwei, die events erzeugen und an eine event queue anhängen, und einer der die Events aus der Event queue holt und abarbeitet. Auf die Art müsstest du nur die event queue mutexen, da bis auf die event queue alle Ressourcen von nur einem Thread benutzt werden.



  • Hy.

    Also danke an eure Antworte´n!

    Das Problem lässt sich zwar mit einer Schleife lösen, nicht so wie ich es wollte, aber tortzdem.

    Das mit den Thread(en/s?) wäre ne bessere Lösung, aber das ist zu Umständlich für dieses Kleine Spiel.

    Danke nochmals!

    mfg Christian



  • 0xdeadbeef schrieb:

    Auf die Art müsstest du nur die event queue mutexen, da bis auf die event queue alle Ressourcen von nur einem Thread benutzt werden.

    brauchste noch nicht mal. man kann queues ohne locks coden, bei denen keine race-conditions auftreten, jedenfalls nicht solche, die zugriffsfehler erzeugen


Anmelden zum Antworten