Threads ?



  • Also, ich bin gerade dabei ein spiel zu programmieren, und jetzt geht es langsam darum das gewisse dinge zu oder nach einer bestimmten zeit passieren sollen.
    Da wäre es ja am einfachsten wenn z.b. die Funktion "GegnerErstellen" erstmal mit Sleep(xxx) angehalten wird und dann irgendwie als Thread im hintergrund laufen würde 🙂

    Ich hab aber keine ahnung von Threads und hab beim suchen zwar was gefunden bin aber noch nicht wirklich schlau drauß geworden 🙂

    Also was mich interessieren würde, was muss ich für Header/Bibliotheken einbinden ? (boost hat sowas wohl aber gibts da alternativen ?)
    Wie genau muss ich meinen Quellcode umschreiben ? Muss ich eventl. das ganze programm komplett abaendern ? Oder reicht es vieleicht ne Funktion einfach als Thread zu deklarieren ? (Was ich mir nicht vorstellen kann da das garnicht so einfach sein soll ;))

    Wär ganz nett wenn ihr mich da nen bissel informieren könntet...



  • Also was mich interessieren würde, was muss ich für Header/Bibliotheken einbinden ? (boost hat sowas wohl aber gibts da alternativen ?)

    Ja, Betriebssystemabhängige. Die werden aber wahrscheinlich auch nicht schöner zu benutzen sein.

    Oder reicht es vieleicht ne Funktion einfach als Thread zu deklarieren ? (Was ich mir nicht vorstellen kann da das garnicht so einfach sein soll ;))

    Wie einfach es ist, hängt von der Bibliothek ab, die du verwendest. Es kann durchaus so einfach sein. Bei .Net:

    (new Thread(funktionszeiger)).Start();
    

    Mit dem boost-Threading kenn ich mich nicht aus.



  • Schau dir mal Boost an, da sind Threads super einfach zu benutzen. Mit zwei C++-Zeilen haste einen Thread gestartet.

    #include <boost/thread/thread.hpp>
    #include <iostream>
    
    void helloworld()
    {
        std::cout << "Hello World!" << std::endl;
    }
    
    int main()
    {
        boost::thread thrd(&helloworld);
        thrd.join();
    }
    

    Da Boost auch noch andere nützliche Dinge hat, lohnt es sich, diese Library zu installieren.

    http://www.boost.org/ und da unter Getting Started die Anleitung befolgen.



  • Optimizer schrieb:

    Also was mich interessieren würde, was muss ich für Header/Bibliotheken einbinden ? (boost hat sowas wohl aber gibts da alternativen ?)

    Ja, Betriebssystemabhängige. Die werden aber wahrscheinlich auch nicht schöner zu benutzen sein.

    Sorry, muss da mal kurz nachhaken? Wie funktionieren eigentlich die boost-Threads? Hab mir die Doku zu Boost kurz angeschaut, da sie aber auf Englisch ist hab ich mich da noch nicht so reingehängt? Kennt jemand eine deutsche Doku zu den Boost-Threads? Kapseln die Boost-Thread-Api die jeweilige Api der zugrundeliegenden Plattform oder ist das eine Entwicklung mit reinen C++-Sprachmitteln ohne jegliche Kapselung plattformabhängiger Schnittstellen.

    Eine kurze Antwort bzw. ein Link würde mir sehr helfen. Ich weiss, dass ich auch hätte Googel benutzen können, da aber gerade das Thema angeschnitten wurde, wollte ich mal kurz nachhaken. Nimmt es mir daher bitte nicht allzu übel? Danke.

    Grüße



  • Mit reinen C++-Sprachmitteln geht das ja schlecht. Sonst bräuchten wir keine Boost-Lib und C++ würde das von Haus aus können.

    Boost macht das natürlich über die jeweilige Platform-API.



  • Huhu,

    merci für die präzise Antwort. Ich bin noch nicht so lange dabei in der Programmierung. Ich dachte, dass es eventuell keine richtigen Betriebssytem-Threads sind, sondern eine Art Pseudo-Threads, die den Eindruck erwecken als wären da echte Threads am Laufen. Eine Art Zeitscheiben-System innerhalb eines Programms, das durch komplexe Programmierung und inline-Assembler (gut: dann wären es wieder keine C++Sprachmittel ;)) erreicht wurde.

    Damit liege ich wohl total daneben. Aber wie schon gesagt: ich stecke in der Materie noch nist so sehr drin'. Verzeiht' mir meine naive Annahme.

    Grüße



  • Wenn ich jetzt die Threads benutzen möchte von Boost, hab da im Forum schon gesehen wie man die "initialisiert" muss ich dann alles andere auch als Thread machen oder kann der rest so normal ohne threads lassen ?



  • Die Frage verstehe ich nicht.



  • Hi Mortal2006,

    😕
    hast du irgendne Ahnung was Threads sind, und wie sie funktionieren. Ich hab
    nicht den Eindruck und empfehle dir daher dringend dich darüber ein wenig zu
    informieren sonst wirst du nicht viel Freude an deinem Programm haben. 🙂

    mfg JJ



  • such mal im Winapi forum nach threads da wirst du fündig.



  • Naja wieviel Ahnung ich von Threads hab hab ich ja im ersten Post gesagt 🙂
    Ich bin einfach davon ausgegangen das man damit das machen kann was ich brauch ... ich werds jetzt einfach mal testen ...



  • Mortal2006 schrieb:

    Da wäre es ja am einfachsten wenn z.b. die Funktion "GegnerErstellen" erstmal mit Sleep(xxx) angehalten wird und dann irgendwie als Thread im hintergrund laufen würde 🙂

    Das einfachste wäre ein Timer, der nach z.B. 5sec. eine Funktion aufruft, die einen Gegner erstellt. Wenn du die SDL benutzt, dann hast du Timerfunktionen mit dabei.

    Ich Schätzte, dass du einen Mail-Loop hast, wo dein Spiel drin abläuft. Darin kanst du auch einfach einen Counter plazieren, der runter zählt bis ein Gegner erzeugt werden soll.



  • Das ist cool 🙂 dann brauch ich das mit den Threads erstmal nicht mehr !
    Thx!



  • Ich hab jetzt doch nochmal ne frage, die bezieht sich zwar nicht auf threads, aber da es schon so viele timer Threads gibt...

    Was ist eine Callback funktion ? Ich hatte mir das so vorgestellt das die Funktion
    aufgerufen wird wenn der Timer abgelaufen ist, scheint aber nicht so zu sein ...
    Muss ich den Timer jetzt abfragen um dann seperat eine funktion zu starten ?

    if(TimerID <= 0)
    


  • Mortal2006 schrieb:

    Was ist eine Callback funktion ? Ich hatte mir das so vorgestellt das die Funktion
    aufgerufen wird wenn der Timer abgelaufen ist

    Ein Callback is eine Funktion, die aufgerufen wird, wenn ein bestimmtes Ereigniss auftritt. Die Funktion sollte aufgerufen werden, wenn der Timer abgelaufen ist.

    Wie hast du denn jetzt den Timer implementiert? Mit der SDL, mit der WinAPI, oder mit Signalen?



  • ... Blub ...
    Ich hatte

    SDL_TimerID blubber;
    	blubber = SDL_AddTimer(1000, Callback, NULL);
    

    vor

    SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER)
    

    gemacht 🙂 Obs daran lag ? ka ...


Anmelden zum Antworten