Boost Threads mit Dynamischem Namen



  • du solltest dir mal den std::vector anschauen, wenn ich das richtig verstanden hab, was du machen willst. wenn nicht, befolge ethons ratschlag.


  • Mod

    Wie bei anderen Variablen auch, ist die Lösung ein dynamisches Feld. Ich mach's mal für die C++-Threads vor, für Boost Threads ist nichts grundlegend anders:

    #include <thread>
    #include <vector>
    #include <iostream>
    #include <chrono>
    
    using namespace std;
    
    void waste_time(unsigned how_much)
    {
      for(unsigned i = 0; i <= how_much; ++i)
        {
          cout << "This is thread " << how_much << " having wasted " << i << " seconds of your life.\n";
          const chrono::seconds one_second(1);
          this_thread::sleep_for( one_second );
        }
    
    }
    
    int main()
    {
      cout << "How many? ";
      unsigned how_many;
      cin >> how_many;
    
      vector<thread> threads;
      for (unsigned i = 0; i < how_many; ++i)
        threads.push_back(thread(bind(&waste_time, i)));
      for (auto &t: threads)
        t.join();
      cout << "All done.\n";
    }
    


  • Ok dann nochmal anders erklärt mein Problem.

    Ich erhalte von einer Funktion einen Intwert nehmen wir an eine 3.
    Diese 3 sagt mir, ich muss 3 Threads starten mit verschiedenen Startparameter etc.

    Ich möchte nun eben was ich aktuell im Header mache:

    boost::thread depth_thread_1;
    

    was ja starr ist.
    Anders lösen weil ich ja im vornerein nicht weiß wieviel Threads es denn mal werden.
    Ich möchte wenn ich jetzt die 3 erhalten habe.
    boost::thread depth_thread_1; anlegen und diesem objekt dann einen Thread zuweisen

    gleiches gilt für
    boost::thread depth_thread_2;
    und
    boost::thread depth_thread_3;

    Es geht darum das ich quasi eine Art Vorlage habe "depth_thread_x" so wird jedes Thread Objekt mal heißen. Nur, dass das X eben einer anderen Zahl für jeden Thread entspricht.

    Ich hoffe das ist jetzt verständlicher 🙂

    @knivil die Threads existieren ja noch nicht.
    Ich will sie ja erstellen mit unterschiedlichen Namen. Darum gehts mir.
    Aber eben nicht im Header sondern entsprechend wie ich sie brauche in der CPP dann.



  • Und die Antwort lautet immer noch: Das geht so nicht. Variablennamen sind im kompilierten Programm gar nicht mehr vorhanden, daher ergibt das so keinen Sinn. Machs wie von SeppJ vorgeschlagen.



  • Ich kann mich den anderen nur anschließen, allerdings empfehle ich dir boost::thread_group-Klasse und ihre Methoden statt vector zu verwenden.



  • SeppJ schrieb:

    vector<thread> threads;
    threads.reserve( how_many );
    

    FTFY 🤡



  • Sone schrieb:

    SeppJ schrieb:

    vector<thread> threads;
    threads.reserve( how_many );
    

    FTFY 🤡

    Da hast Du falsch zitiert.
    Hätte mich auch gewundert, wenn SeppJ so einen unwichtigen Quatsch machen würde.



  • volkard schrieb:

    Sone schrieb:

    SeppJ schrieb:

    vector<thread> threads;
    threads.reserve( how_many );
    

    FTFY 🤡

    Da hast Du falsch zitiert.
    Hätte mich auch gewundert, wenn SeppJ so einen unwichtigen Quatsch machen würde.

    Wer weiß, vielleicht erstellt er tausend Threads. Würde mich nicht wundern, bei jemandem der Threads nutzt aber denkt er könnte Identifier zur Laufzeit dynamisch erzeugen.



  • Sone schrieb:

    volkard schrieb:

    Sone schrieb:

    SeppJ schrieb:

    vector<thread> threads;
    threads.reserve( how_many );
    

    FTFY 🤡

    Da hast Du falsch zitiert.
    Hätte mich auch gewundert, wenn SeppJ so einen unwichtigen Quatsch machen würde.

    Wer weiß, vielleicht erstellt er tausend Threads. Würde mich nicht wundern, bei jemandem der Threads nutzt aber denkt er könnte Identifier zur Laufzeit dynamisch erzeugen.

    Wieviele Takte wird es kosten, tausend Threads zu basteln?
    Wieviele Takte kosten die 5 extras-new-Aufrufe?
    Du verbaust Dir nur, schmerzfrei den Container wechsel zu können, Du müllst Dir den Code mit Optimierungs-Bloat zu, so wird das nix, kleiner PI-Nachfolger.



  • 5 extras-new-Aufrufe?

    Edit: Stopp. Wovon redest du da? Der wird schon öfter neu allokiert.

    Pi-Nachfolger? Ist es so schlimm? 😞



  • Sone schrieb:

    5 extras-new-Aufrufe?

    Edit: Stopp. Wovon redest du da?

    Schon vom selben. Ok, meinetwegen Faktor 1.5 und Startgröße 16.

    Sone schrieb:

    Pi-Nachfolger? Ist es so schlimm? 😞

    Die Richtung scheint mir gleich. Die Dosis ist noch schwächer.



  • Danke für die Hilfe, es tut mir leid das ich nicht wusste das man Identifier nicht zur Laufzeit dynamisch erzeugen kann. Sone 😞


Anmelden zum Antworten