C++ Plots+Bildschirmsperre blockiert Programm

T_55

Lieutenant
Registriert
Feb. 2013
Beiträge
638
Hallo,

ich habe jetzt ein interessantes Phänomen entdeckt, ein Programm hört auf zu arbeiten sobald unter Linux die Bildschirmsperre aktiviert wird.
Als Ursache konnte ich identifizieren, dass es am Plotten von Graphen liegen muss. GUI per QT(C++) mit Graphen durch qcustomplot.
Das Programm zeigt während es arbeitet regelmäßig qcustomplot-Graphen an, sobald die Bildschirmsperre aktiviert ist blockiert das Programm und arbeitet nicht weiter. Wenn ich die regelmäßige Anzeige der qcustomplot-Graphen deaktiviere läuft das Programm nach der Bildschirmsperre wie gewollt weiter. Scheint also irgendein Problem zwischen QT und Linux (ggf dem Fenstermanager) zu sein?
Woran liegt das?

Grüße
 
Grundsätzlich müsste bei Bildschirmsperre auch nicht geplottet werden allerdings müsste dann das Programm ja irgendwie feststellen, dass die Bildschirmsperre aktiv ist...
if(Bildschirmsperre==true) {dann plotte} else {plotte nicht}

KingLz schrieb:
Rufst du .replot() auf? Und wenn ja mit welchem Parameter?
Ja richtig, aktuell ohne Parameter.

KingLz schrieb:
Vielleicht hilft QCustomPlot::rpQueuedReplot als Anweisung.
Super danke werde das als erstes ausprobieren.
 
Sag an ob's was gebracht hat, ich hab prinzipiell auch wenig Ahnung und nur geraten. ;)
 
Leider hat das nichts verändert aber war eine gute Idee.

Folgende Varianten hab ich mal probiert:
replot(QCustomPlot::rpQueuedReplot);
replot(QCustomPlot::RefreshPriority::rpQueuedReplot);
 
Ich würde ansonsten einfach mal Debugging über Konsolenausgabe empfehlen.
Einfach an verschiedenen Punkten die aktuelle Zeit ausgeben und was gerade gemacht wird.

Oder ist es sicher dass es die replot Funktion ist die alles blockt?
 
KingLz schrieb:
Oder ist es sicher dass es die replot Funktion ist die alles blockt?
Ich habe es nochmal geprüft und die replot Funktion gekapselt per if Abfrage einer Checkbox (isChecked() == true). Es liegt definitiv nur an der replot() Funktion. Sobald diese aufgerufen wird blockiert das Programm während der Bildschirmsperre und sobald replot() nicht aufgerufen wird blockiert es nicht.
Werde vielleicht mal direkt bei qcustomplot.com fragen vielleicht gibts da vom Entwickler eine Lösung. Gut ansonsten muss man eben die Plots immer manuell deaktivieren wenn man sicher sein will das nichts blockiert, geht zwar auch wäre aber bisschen ein Kompromiss.
 
Ich habe keine Ahnung von QT (mehr), aber wenn irgendeine Grafikausgabe durch Blockieren verhindert, dass irgendetwas anderes Sinnvolles ausgeführt wird, wäre es dann eine Option, das nebenläufig zu machen?
 
Völlig korrekt werde das mal ausprobieren. Aktuell hab ich es bewusst so, dass das Programm erst nach Aufruf der replot() Funktion weitermacht damit keines Plots "verpasst" werden. Auch müssen die Daten ja noch bereit stehen. Da replot() leider beim Screenlock blockiert, wäre die Sache nebenläufig zu machen auf jeden Fall ein Ansatz aber würde auch dazu führen, dass während dem Screenlock etliche Threads erzeugt werden die mit replot() blockiert werden und alle gemainsam erst aufwachen wenn der Screen nicht mehr gesperrt ist. Würde es dann eher so machen, es Nebenläufig zu machen aber vor replot() ein bool zu aktivieren und nach dem replot() das bool wieder zurückzustellen. Das bool sorgt dann dafür, dass maximal ein replot() blockiert (replot() wird nur aufgerufen wenn das bool entsperrt ist) so werden die plots einfach übersprungen sobald ein replot() blockiert.
 
Zuletzt bearbeitet:
Ok habe das wie beschrieben umgesetzt und es funktioniert. Damit ist das Problem behoben. Danke nochmal
 
Zurück
Oben