[Erledigt] std::thread - zuviele Argumente?



  • Hiho,
    ich mal wieder..

    habe momentan das Problem, dass, unabhängig welche Funktion ich nehme, std::thread mir bei 6 Funktions-Parametern oder mehr einen Fehler anzeigt.

    Habe die Prototypes/die Funktion und auch die Parameter mehrmals überprüft. Bisher hat das Internet nichts ausgespuckt außer "weniger Parameter verwenden". In meinem Beispiel ist es jedoch unerlässlich. Zudem finde ich, dass 6 Parameter nicht unbedingt zuviel sind, wenn es viele User-Eingaben gibt.

    Einer eine Idee?

    Danke im Voraus.
    mfg



  • Dein Compiler unterstützt dann halt noch keine Variadic Templates und die STL-Implementierung behilft sich mit rekursiven Präprozessor-Makros. Um den Compiler nicht zu sehr damit zu belasten, wird dort ein recht niedriger Grenzwert gesetzt. So ziemlich jede dieser Bibliotheken besitzt aber eine Möglichkeit, den Grenzwert zu verändern.
    Welche STL hast du da?

    Aber mal ehrlich, ein Thread gleich mit 6 shared Objekten? Du hast Mut! 🙂
    Edit: Man könnte die Eingaben, die im Sinne eines Kontexts zusammen gehören, ja auch in eine Struktur zusammenpacken...



  • Danke für den Tipp mit der Struktur 🙂 Daran habe ich garnicht gedacht.

    €: Shared Objekten? Die Objekte sind sogut wie alle eher read-only bis auf einzelne Zahlen, die mit Interlocked inkrementiert und dekrementiert werden, um die Progressbar zu updaten (auch noch mal in nem parallelen Thread, lol)



  • An0nym0us schrieb:

    In meinem Beispiel ist es jedoch unerlässlich.

    Und wenn Du Dir eine struct bauest mit 6 Attributen und dann nur eine struct übergibst?



  • volkard schrieb:

    An0nym0us schrieb:

    In meinem Beispiel ist es jedoch unerlässlich.

    Und wenn Du Dir eine struct bauest mit 6 Attributen und dann nur eine struct übergibst?

    Jo, wie dein Vorposter auch schon erwähnt hat. Ist mir total entgangen 🙂 Danke für eure Hilfe.



  • Volkard wiederholt micht. Ich habe die nächste Stufe erreicht! \o/ 🙂



  • Normalerweise ist dieser struct dann sogar eine irgendwie sinnvolle Zusammenfassung von Parametern, die sich um genau einen Job kümmern. Zum Beispiel HttpWorker, ClientConnection, KaratubaSubProduct, WasWeissDennIch und es ist zu überlegen, ob da Methoden reinsollten und nur this übergeben wird.



  • Mit dem nächsten Update werden wohl endlich Variadic Templates supported. Bis dahin kannst du das Makro _VARIADIC_MAX projektweit auf einen Wert größer als 5 (5 ist Default, max. 10) setzen, falls das die Compile-Zeit dadurch nicht zu weit in die Höhe geht...



  • Ich glaube dann, dass ich eher zur zweiteren Variante greife, da Structs in meinem Fall eher unnütz wären. Ich müsste somit für jeden Thread ein neues Struct machen. Es sind drei verschiedene Threads, die alle ~6-7 Argumente benötigen. Danke für den Tipp.


Anmelden zum Antworten