Ich habe da eine Frage zu dem Design einer Anwendung.
Folgendes Szenario:
Aus einer Quelle, die unterschiedlich schnell liefert, bekomme ich Daten. Immer wenn ein Datensatz eingetroffen ist möchte ich den Benutzer darüber informieren.
Im Hintergrund laufen dann aber verschiedene Dinge ab, die mit diesem Datensatz passieren. Je nach Datensatz kann das unterschiedlich lange dauern, deshalb habe ich das in einen eigenen Thread ausgelagert. Diesen Vorgang möchte ich für den Benutzer durch Änderungen der dargestellten Informationen sichtbar machen.
Ich gehe bisher wie folgt vor:
In einem Fenster gibt es ein QListWidget, an das ein Item angefügt wird sobald ein Datensatz vollständig angekommen ist. Der Benutzer weiß also Bescheid, dass es einen neuen Datensatz gibt.
Das Item besitzt einen Slot, der mit einem Thread verbunden wird, der die Items in einer Queue sammelt und nacheinander abarbeitet.
Sobald der Thread bestimmte Punkte in der Abarbeitung erreicht, sendet er das Signal, das den Slot im Item aufruft und dort Änderungen an den dargestellten Informationen vornimmt.
Die Frage ist, wie mache ich das am "günstigsten"?
Wenn ich jedes Item mit dem selben Signal mit dem Thread verbinde, dann würde ja jedes Item dieses Signal empfangen und müsste prüfen ob es überhaupt selbst gemeint ist. Das könnten irgendwann sehr viele Items werden, die dann unnötig aktiviert werden.
Ich könnte auch für jedes Item ein extra Signal erstellen und den Namen für das Signal z.B. aus dem Hash des Items generieren. Dann wäre der Empfänger des Signals eindeutig, dafür gibt es irgendwann sehr viele Signale im System. Um das zu verhindern könnte ich höchstens versuchen die Signale sauber wieder zu trennen nachdem der Thread definitiv die Arbeit für das Item beendet hat.
Die nächste Möglichkeit wäre in dem Hauptfenster, dass die Items kennt, den Slot einzubauen und dort die Verarbeitung vorzunehmen.
Ich tendiere zu 3, habe aber Angst weitere Möglichkeiten übersehen zu haben
