Multi Threading



  • Hallo und guten Tag

    Ich hab mal eine konstruktive Anfrage. Ich arbeite mich gerade in das Thema Threading ein.

    Ich besitze 3 Klassen, die völlig autonom Ihre Arbeiten erledigen sollen. Ich möchte dies mit Multithreads realisieren. Jede Klasse hat dafür auch entsprechende Einstiegspunkte. Anderseits müssen die Klassen (teils durch übergreifende Abfragen) selber bestimmte Erreignisse erkennen können um dann von sich aus ihre Arbeiten zu erledigen.

    Aufgerufen sollen die 3 Threads bzw. die 3 Klassen beim Start des Programmes.

    Es kann unter Umständen vorkommen, dass einer der Threads zuerst auf den anderen Thread warten muss, damit die Arbeit errichtet werden kann. Z.B. muss zuerst die Kalkulation abgeschlossen sein, bevor die Daten auf die Hardware abgelegt werden können. Ich denke dafür werde ich mir entsprechende Codegestaltungen machen und auch eine kritische Zone einbauen mit Mutex.

    //Hauptprogramm
    //boost::thread t1,t2,t3;
    ......
    
    class FileHandling{
    private:
    public:
    	doIt(arrayTyp array,string filename);
    	//..
    
    }
    
    class Calculation{
    private:
    public:
    	Calc1(alle notwendigen Parameter);
    	Calc2(alle notwendigen Parameter);
    	//..
    
    }
    
    class SomeOneClass{
    private:
    public:
    	doIt1(...);
    	//..
    }
    

    Wie soll ich das am besten bewerkstelligen. Soll ich mir hierzu eine Threadklasse erstellen, aus der das ganze gesteuert wird, oder gibt es bessere Wege dafür?

    Danke für die Antworten.

    wachs



  • Die Frage kann wohl niemand beantworten, da sie sehr vage und widersprüchlich ist. Sind die Verarbeitungsschritte nun autonom oder verarbeitet ein Task die Ergebnisse des Anderen?

    Grundsätzlich würde ich https://www.threadingbuildingblocks.org/ empfehlen, statt selber eine Threadverwaltung zu schreiben. Die Doku könnte zwar besser sein, aber es sind doch recht nützliche Dinge enthalten (z.B. paralell_pipline, falls ein Task die Ergebnisse des Anderen verarbeitet).



  • Hallo wachs,

    da könnte das Active-Object-pattern helfen, es gab auch schon mal einen Thread zu einem ähnlichen Thema mit Multithreading.



  • Vielen dank für die Anworten.

    Werde mir beide Möglichkeiten anschauen.

    Ich bin erst in der Anfangsphase und es gibt noch Punkte, die ich für die Umsetzung abklären muss.

    Nochmals danke

    wachs

    Edit:
    @manni66, sorry hab deine konkrete Frage erst jetzt gesehen
    Die Einstiegspunkte sollen eine Möglichkeit darstellen, um eine Verrichtung JETZT zu machen. Eventuell kann ich die ja auch weglassen und das mit einer Abfrage lösen.



  • wachs schrieb:

    Aufgerufen sollen die 3 Threads bzw. die 3 Klassen beim Start des Programmes.

    Wenn du noch gar nicht weisst wie man das sinnvollerweise macht, wieso gibst du dann schon "Solls" vor? Ich bin mir fast sicher dass es keinen Sinn machen wird alle Threads bei Programmbeginn zu starten.

    wachs schrieb:

    Es kann unter Umständen vorkommen, dass einer der Threads zuerst auf den anderen Thread warten muss, damit die Arbeit errichtet werden kann. Z.B. muss zuerst die Kalkulation abgeschlossen sein, bevor die Daten auf die Hardware abgelegt werden können.

    Wenn du zwei Dinge hast, die hintereinander geschehen sollen ... wieso zum Geier willst du sie dann in zwei verschiedenen Threads laufen lassen? Wo ist da der Sinn?
    Oder sollen Calc1 und Calc2 gleichzeitig laufen?



  • Hallo hustbaer

    Ich denke es steht wirklich alles im Text was ich als Vorgabe bzw. was ich vor habe habe. Bitte liess es doch einfach nochmals durch.

    Gruss wachs


  • Mod

    wachs schrieb:

    Ich denke es steht wirklich alles im Text was ich als Vorgabe bzw. was ich vor habe habe. Bitte liess es doch einfach nochmals durch.

    Das ist richtig, dass da steht, was du vor hast, das beantwortet aber in keiner Weise hustbaers sehr berechtigte Fragen. Es verstärkt sogar eher noch die Nötigkeit dass du dich mit diesen Fragen beschäftigst.

    Und seit wann hast du Vorgaben? Davon hast du bis jetzt gar nichts erwähnt und dementsprechend steht auch nicht geschrieben, was diese sind.



  • Also ich kann es nur nochmals wiederholen. Es steht im Text was ich vorhabe. Das ich die Nötigkeit habe, mich um andere Fragen innerhalb der Klasse zu machen, ist sicher ein gut gemeinter Hinweis, der aber für mich im Moment gar nicht relevant ist. Zur Beruhigung. Ja ich habe mich mit dem schon beschäftigt.

    In einer anderen Sprache, habe ich eine Klasse mit Threads gemacht. Diese Lösung funktioniert einwandfrei. Und jetzt möchte ich etwas sehr ähnliches auch in C++ machen. Darum habe ich auch hier eine Anfrage gestartet. Und ich denke im Text habe ich geschrieben, wo ich eventuell ein Problem sehe.

    Erwähnt habe ich, dass ich mich in Threads einarbeite. Mehr möchte ich auch nicht dazu schreiben. Es gibt nicht mehr zu schreiben, denn es geht mir im Moment nur um diese eine Frage.

    gruss wachs



  • Dann viel Spass noch :>



  • Danke Skym0sh0, den hatte ich.

    Heute morgen mich hingesessen und losprogrammiert. Soweit alles gelöst und funktionsfähig.

    Und JETZT werde ich mich den Angelegenheiten innerhalb der Klasse widmen.

    wachs


Anmelden zum Antworten