Frage

Ich war am Aufbau eines Custum -QGIS -Antrags beteiligt, in dem Live -Daten auf dem Betrachter des Antrags angezeigt werden sollen.

Der verwendete IPC ist die Unix -Nachrichtenwarteschlangen.

Die Daten sollen in einem bestimmten Intervall mitspielsweise 3 Sekunden aktualisiert werden.

Das Problem, mit dem ich konfrontiert bin, ist nun, dass die Verarbeitung der Daten, die gezeigt werden sollen Und nachdem die Daten verarbeitet wurden, starte ich erneut die QTimer neu. Die App sollte so funktionieren, dass der Benutzer nach einer Aktualisierung/Aktualisierung (während dieser Aktualisierung die App nicht mehr reagiert) ausreichend Zeit haben sollte, um weiter zu arbeiten, abgesehen von der App, abgesehen davon Wenn die Daten aktualisiert werden. Ich bin in der Lage, akzeptable Pausen für den Benutzer zu erhalten- in einem Szenario.

Aber unter verschiedenen Betriebssystemen (RHEL 5.0 bis RHEL 5.2) ist die Situation etwas anderes. Der Timer wird wild und feuert weiter 3 Sekunden, aber aus diesem Grund habe ich den Timer während der Verarbeitung aufgehört, und dieselbe Logik funktioniert in einem Szenario, während es in einem anderen tut. Die andere Tatsache, die ich beobachtet habe passiert, dass die Zeit, die von der erfrischenden Funktion zum Ausgang beendet ist Die Daten sind abgeschlossen, es gibt 3-4 Starts des Timers in der Warteschlange, die darauf warten, ausgeführt zu werden, und somit wird das Problem der unendlichen Schleife von diesem Zeitpunkt für jede aufeinanderfolgende Aktualisierung verschlechtert.

Das Wichtigste hier ist, dass für denselben Code in einem Betriebssystem die Aktualisierungszeit als etwa 4000 ms (die tatsächliche Verarbeitungszeit für die gleiche Datenmenge) angezeigt wird, während für das andere Betriebssystem seine 300 ms.

Vielleicht hat das etwas mit neueren Bibliotheken auf dem aktualisierten Betriebssystem zu tun. Aber ich weiß nicht, wie ich es debuggen soll, weil ich keine Hinweise bekommen kann das oss ??

Meine Abfrage ist also, dass dies eine Möglichkeit gibt, dass eine gewisse Verarbeitung in meiner App Timerised (und das ist unabhängig vom Betriebssystem), ohne QTimer zu verwenden, da ich denke, dass QTimer keine gute Option ist, um das zu erreichen, was ich will?

Welche Option kann da sein? PTHREADS oder Threads? Welches wäre besser, wenn ich Threads als Alternative verwenden würde?

Freundlich helfen.

Vielen Dank.

War es hilfreich?

Lösung

Wenn ich versuchen würde, eine akzeptable, längerfristige Lösung zu erhalten, würde ich die Aktualisierung Ihres Displays in einem separaten Thread untersuchen. In diesem Thread können Sie das Display auf ein Bild malen und so oft wie Sie wünschen ... obwohl Sie den Thread vielleicht drosseln möchten, damit nicht die gesamte verfügbare Verarbeitungszeit benötigt wird. Dann konnten Sie im UI -Thread dieses Bild lesen und auf dem Bildschirm zeichnen. Dies könnte Ihre Reaktion auf das Schwingen verbessern, da Sie verschiedene Teile des Bildes anzeigen könnten. Sie können das Bild alle 3 Sekunden basierend auf einem Timer aktualisieren (nur aus der Quelle neu zeichnen) oder den anderen Thread ein Signal emittieren, wenn die neuen Daten vollständig aktualisiert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top