Sigbal Parameter in "connect" auslesen?

Alles rund um die Programmierung mit Qt
Antworten
nierth
Beiträge: 30
Registriert: 19. November 2008 22:56

Sigbal Parameter in "connect" auslesen?

Beitrag von nierth »

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
DarkWotan
Beiträge: 65
Registriert: 18. Mai 2006 10:03

Beitrag von DarkWotan »

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.
nierth
Beiträge: 30
Registriert: 19. November 2008 22:56

Beitrag von nierth »

habe ich noch nie davon gehört, wie geht das?
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

sowas nennt man "Schleife"

Code: Alles auswählen

foreach(MyThread *nextThread, threadList) 
  connect(sender, SIGNAL(foo(int),) nextThread, SLOT(doit(int)));
nierth
Beiträge: 30
Registriert: 19. November 2008 22:56

Beitrag von nierth »

ich will aber eigentlich jeden Thread mit einem eigenen Signal ansprechen...
DarkWotan
Beiträge: 65
Registriert: 18. Mai 2006 10:03

Beitrag von DarkWotan »

nierth hat geschrieben:ich will aber eigentlich jeden Thread mit einem eigenen Signal ansprechen...
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.
Was genau willst du denn machen?
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Warum denn nicht einfach eine ID mitgeben, und im Slot des Threads "if (id != myId) return;" schreiben? Wird bei Broadcasts häufig gemacht..
nierth
Beiträge: 30
Registriert: 19. November 2008 22:56

Beitrag von nierth »

thx solarix, das ist die lösung!
Antworten