Dynamische Objekt erstellung aus Liste



  • Hallo,
    also will mit meine Aktuellen projekt daten von mehreren TCP ports empfangen und verarbeiten.
    Dazu hab ich mir bisher eine empfangsfunktion für einen einzelnen port geschrieben.

    Nun habe ich eine Liste in der die ports als int stehen.

    Nun will ich, dass zu jedem eintrag in der list eine thread mit der empfangsfunktions gestartet wird.

    Dazu habe ich die empfangsfunktion in eine Klasse gesteckt.

    Nun weiß aber nicht wie ich die objekte dynamisch zur liste erstellen soll.

    also hier gehe ich durch die Liste:

    for (iter = ports.begin(); iter != ports.end(); iter++)
    		{
    			new Object erstellen;
                               objekt funktion in thread aufrufen
                       }
    

    Ich hoffe es ist klar geworden was ich will


  • Mod

    Erstell doch einfach eine Liste von deinen Empfangsobjekten:

    vector<Object> object_liste;
    for (iter = ports.begin(); iter != ports.end(); iter++)
       {
        object_liste.push_back(Object(passende Parameter));
       } 
    object_liste weiter verwenden;
    

    Habe ich dich da jetzt richtig verstanden?



  • hm ne ich glaube nicht

    ich weiß nciht wie ich die Objekte erstellen soll.
    Ich will bei jedem durchlauf der schleife ein objekt mit einem anderen Namen erstellen (z.B. die portnr als namen).
    Nach der schleife ruf ich dann dessen rx methode auf.

    Mein problem ist quasi das new. ich hab ka wie ich das benutzen soll.


  • Mod

    Dafür brauchst du kein new. Eigentlich braucht man so gut wie nie new. Wenn's unbedingt mit Portnummer als Name sein soll, dann eben so:

    map<int, Object> object_liste;
    for (iter = ports.begin(); iter != ports.end(); iter++)
       {
        object_liste[*iter]=Object(passende Parameter);
       }
    object_liste[portnummer].rx();
    


  • Wenn ich dich richtig verstehe, willst du dem Constructor als Argument die Portnummer mitgeben? In dem Object startest du dann deinen Empfangsthread. Allerdings solltest du auch den Port als benutzt kennzeichnen.
    Wobei mir auffällt, wahrscheinlich willst du auch so etwas wie select() machen? Damit kannst du an verschiedenen Ports auf eingehende Verbindungen lauschen. Einfach selber zu testen ob du etwas empfangen kannst ist zumindest keine gute Idee.



  • new123 schrieb:

    hm ne ich glaube nicht

    Leider ist deine Beschreibung auch nicht wirklich verständlich.

    Grundsätzlich: Für das Anlegen von Objekten wird nicht zwangsweise new benötigt, in der Regel vermeidet man dies sogar, wenn es geht. Die STL-Container arbeiten mit Objektkopien, und kümmern sich selbst um die Datenhaltung. Zeiger und Referenzen sind im wesentlichen dann relevant, wenn Polymorphie benötigt wird.

    new123 schrieb:

    Ich will bei jedem durchlauf der schleife ein objekt mit einem anderen Namen erstellen (z.B. die portnr als namen).

    Wenn du damit Variablennamen meinst: Das geht garnicht. Variablennamen existieren in einem Programm nicht. Alternativ arbeitet man in der Regel mit Containern oder Arrays (und arbeitet z.B. mit einem Index, oder einem "Schlüssel" wie bei der std::map).

    new123 schrieb:

    Mein problem ist quasi das new. ich hab ka wie ich das benutzen soll.

    Sofern nicht nötig: Garnicht.


Log in to reply