Hallo,
ganz einfaches Problem: Kann man einen connect-befehl in der Form:
connect(a, SIGNAL(zx(int)), b.at(int), SLOT(xy));
schreiben? Der übergebene int-Wert soll hierbei als Index gelten, welcher Empfänger angesprochen wird.
Der Hintergrund ist, dass ich eine von der Anzahl an CPU-Kernen abhängige Anzahl an parallel laufenden Threads habe. Allerdings weiß ich diese Anzahl im Voraus nicht.
Grüße,
Thomas
Sigbal Parameter in "connect" auslesen?
Hallo,
nein, so geht das nicht. Durch die Makros SIGNAL und SLOT wird der übergebene Text vom Compiler als String behandelt. Ohne diese wäre der Code gar nicht kompilierfähig. Für die Auswertung der Strings ist der moc zuständig. Das int aus deinem Signal kann daher nicht als echter Laufzeitparameter für die at-Methode verwendet werden.
Aber für dein Problem gibt's doch sicher einen eleganten Weg? Du kannst doch abhängig von der Kernzahl entsprechend dynamisch connect()en.
nein, so geht das nicht. Durch die Makros SIGNAL und SLOT wird der übergebene Text vom Compiler als String behandelt. Ohne diese wäre der Code gar nicht kompilierfähig. Für die Auswertung der Strings ist der moc zuständig. Das int aus deinem Signal kann daher nicht als echter Laufzeitparameter für die at-Methode verwendet werden.
Aber für dein Problem gibt's doch sicher einen eleganten Weg? Du kannst doch abhängig von der Kernzahl entsprechend dynamisch connect()en.
sowas nennt man "Schleife"
Code: Alles auswählen
foreach(MyThread *nextThread, threadList)
connect(sender, SIGNAL(foo(int),) nextThread, SLOT(doit(int)));
Das wirst du so nicht machen können. Ein Signal ist, wie eine Methode, fix in den Code kompiliert. Du kannst nicht weitere Signale zur Laufzeit hinzufügen. Aber dafür kannst du sie ja mit Parametern versehen. Ich kann mir gerade schlecht ein Szenario vorstellen, in dem dein Weg der elegantere gegenüber allen anderen Möglichkeiten zur Realisierung wäre.nierth hat geschrieben:ich will aber eigentlich jeden Thread mit einem eigenen Signal ansprechen...
Was genau willst du denn machen?