Zeitintensive Function in Thread "kapseln" ?
Verfasst: 1. Dezember 2007 21:47
Hallo zusammen,
ich muss in meinem Programm mehrfach eine function aufrufen, die einige Sekunden benötigt, um den Rückgabewert zu liefern. Dabei handelt es sich um eine Read-Funktion, ueber die ich Daten von einem Messgerät abfragen kann (stammt aus einer externen Geräte-Bibliothek und kann daher nicht geändert werden).
Dabei friert mir natürlich jedesmal das GUI (QMainWindow) im Hauptthread ein.
Mein momentaner Ansatz besteht darin, dass Ganze in einem Thread zu kapseln, hier komme ich aber im Augenblick nicht weiter:
Ich möchte das Problem eigentlich nicht per Signals/Slots lösen, weil
1) die Read-Funktionan an den verschiedensten Stellen im Programm aufgerufen wird
2.) die Weiterverarbeitung des Rückgabewerts vom Verwendungs-Kontext abhängt
Das würde praktisch dazu führen, dass ich entweder unzählige zusäztliche Slot-functions brauche oder aber dem Thread Informationen darüber mit mitgeben muss, was mit dem Ergebnis (Rückgabewert) geschehen soll. Diese Informationen könnte dann der "empfangende" Slot des Hauptthreads auswerten. In jedem Fall würde das Programm aber dadurch sehr kompliziert bzw. unübersichtlich...
Es wäre also wünschenswert, den Rückgabewert in der gleichen Funktion auszuwerten, die auch die Read-Funktion aufruft.
Den Lese-Vorgang (Aufruf der Read-Funktion) in einem separaten Thread ablaufen zu lassen ist zwar 'ne leichte Übung, aber wenn ich mit wait()-Methode auf das Ende des Threads warte, friert mir mein GUI natürlich genauso ein...
Bin für jeden Lösungs-Ansatz dankbar...
ich muss in meinem Programm mehrfach eine function aufrufen, die einige Sekunden benötigt, um den Rückgabewert zu liefern. Dabei handelt es sich um eine Read-Funktion, ueber die ich Daten von einem Messgerät abfragen kann (stammt aus einer externen Geräte-Bibliothek und kann daher nicht geändert werden).
Dabei friert mir natürlich jedesmal das GUI (QMainWindow) im Hauptthread ein.
Mein momentaner Ansatz besteht darin, dass Ganze in einem Thread zu kapseln, hier komme ich aber im Augenblick nicht weiter:
Ich möchte das Problem eigentlich nicht per Signals/Slots lösen, weil
1) die Read-Funktionan an den verschiedensten Stellen im Programm aufgerufen wird
2.) die Weiterverarbeitung des Rückgabewerts vom Verwendungs-Kontext abhängt
Das würde praktisch dazu führen, dass ich entweder unzählige zusäztliche Slot-functions brauche oder aber dem Thread Informationen darüber mit mitgeben muss, was mit dem Ergebnis (Rückgabewert) geschehen soll. Diese Informationen könnte dann der "empfangende" Slot des Hauptthreads auswerten. In jedem Fall würde das Programm aber dadurch sehr kompliziert bzw. unübersichtlich...
Es wäre also wünschenswert, den Rückgabewert in der gleichen Funktion auszuwerten, die auch die Read-Funktion aufruft.
Den Lese-Vorgang (Aufruf der Read-Funktion) in einem separaten Thread ablaufen zu lassen ist zwar 'ne leichte Übung, aber wenn ich mit wait()-Methode auf das Ende des Threads warte, friert mir mein GUI natürlich genauso ein...
Bin für jeden Lösungs-Ansatz dankbar...