[QT] Kommunikation zwischen QThread und GuiThread ( solved )



  • Hi Leute

    sagen wir mal ich habe einen gesonderten Thread, der Daten aufbereitet/besorgt/liest/ etc...

    Wie kann ich die Daten nun dem GUI-Thread zuführen um z.B. eine Visualisierung vorzunehmen?

    Meine erste Idee, als Unwissender, wäre eine threadsichere Queue anzulegen, in die der QThread reinschreibt. Diese wird dann durch einen QTimer in regelmäßigen Intervallen ausgelesen.

    Ist das die übliche Vorgehensweise, oder macht man das anders?



  • Finde den Ansatz jetzt auf jeden Fall nicht verkehrt. Ist auf jeden Fall besser, als die GUI die ganze Zeit über neue Daten zu benachrichtigen (außer, es sind insgesamt nur ganz wenige Daten die ab und zu reinkommen).



  • Ist das die übliche Vorgehensweise

    Ja, kann so gemacht werden.

    Meine erste Idee, als Unwissender, wäre eine threadsichere Queue anzulegen, in die der QThread reinschreibt. Diese wird dann durch einen QTimer in regelmäßigen Intervallen ausgelesen.

    Warum ueber einen Timer? Kann die GUI nicht einfach in der Queue nachsehen, wenn sie Zeit dafuer hat?



  • knivil schrieb:

    Ist das die übliche Vorgehensweise

    Ja, kann so gemacht werden.

    Meine erste Idee, als Unwissender, wäre eine threadsichere Queue anzulegen, in die der QThread reinschreibt. Diese wird dann durch einen QTimer in regelmäßigen Intervallen ausgelesen.

    Warum ueber einen Timer? Kann die GUI nicht einfach in der Queue nachsehen, wenn sie Zeit dafuer hat?

    Genau diese Idee wollte ich quasi ausleuchten. Da ich gerade frisch bei QT bin, fehlt mir noch das Wissen, wie ich die EventQ überreden kann, mal in meinem Container nachzuschauen 😉

    Gibt es irgendwelche Events, die regelmäßig von der EventQ aufgerufen werden, die ich vielleicht überschreiben und so ausnutzen kann?



  • void QObject::timerEvent ( QTimerEvent * event ) [virtual protected]

    http://qt-project.org/doc/qt-4.8/qobject.html#timerEvent



  • Vielen Dank. Auch die Variante werde ich mir mal anschauen.


Log in to reply