Ich versuche, eine Echtzeit-Datenerfassungsanwendung, die Task hat Zeit zu machen. Jede Aufgabe kann einen anderen oder den gleichen Aktualisierungszeitraum haben. Ich möchte die Aufgabe mit dem gemeinsamen Aktualisierungszeitraum in einer Liste speichern, in der ich sie durchlaufen und die Funktion aufrufen kann, die ich in der Liste registriert habe. Wie würde ich Callbacks zu einer Datenstruktur wie einer Liste oder einem Vektor hinzufügen? Kann ich Slots darin speichern?Qt Liste der Rückrufe
Antwort
Sie können Callback-Funktionen in Form von boost :: function in eine Datenstruktur wie Liste oder Vektor einfügen.
Wenn Sie jedoch zeitlich abgestimmten Aufgaben haben und diese Aufgaben möchte in bestimmten Abständen wiederholen, können Sie einfach eine Liste von QTimer speichern kann
QList<QTimer> timed_tasks;
In Ihrem Setup finden Sie den richtigen Timer auf die Verbindung korrekte Steckplatzfunktionen. Dann starte deine Qt-Ereignisschleife.
Wenn Sie ein sehr dichtes Sammlungsprogramm ausführen (d. H. Viele lange Aufgaben, die jedoch in Echtzeit ausgeführt werden müssen), sollten Sie Ihre Steckplatzfunktionen in separaten Threads verwenden. Auf diese Weise kann Ihre Hauptereignisschleife immer noch ausgeführt werden (und Tasks abfeuern). Andernfalls werden Aufgaben, die zu lange dauern, andere Aufgaben nicht ausführen, da die Ereignisschleife nicht rechtzeitig zurückkehrt, um die anderen fälligen Aufgaben auszulösen.
Sie können diese Aufgaben auch in Bezug auf QRunnable implementieren und einen QThreadPool bereitstellen, der sie ausführt. Ich schlage vor, Sie überprüfen http://doc.qt.io/archives/4.6/threads.html, wenn Sie diese Straße hinunter gehen.
UPDATE: Die oben vorgeschlagene Lösung behandelt mehrere Timer, die gleichzeitig zünden. Um dem Benutzer die Kontrolle darüber zu geben, welcher Timer ausgelöst werden soll (d. H. Welcher Wert zu sammeln ist), können Sie QObject :: killTimer und QObject :: startTimer verwenden. Dies erfordert keinen zusätzlichen Speicherplatz für Bittabellen oder andere Mechanismen zum Speichern, welcher Timer gerade aktiv ist.
- 1. Sollte ich Qt Signal/Slot-Mechanismen über traditionelle Rückrufe verwenden?
- 2. Scrollen Liste der Etiketten auf Qt
- 3. Generisches Rückrufe
- 4. socket.io Rückrufe
- 5. Rückrufe: java.lang.ClassCastException
- 6. Delphi-Rückrufe?
- 7. WSDualHttpBinding für Duplex-Rückrufe
- 8. Rückrufe in C#
- 9. ServerCertificateValidationCallback - mehrere Rückrufe
- 10. Asynchrone Rückrufe in JavaScript
- 11. Wie Betriebssystem Rückrufe arbeiten
- 12. Android TurnBasedMutliplayer Keine Rückrufe
- 13. Rückrufe mit Std :: Funktion
- 14. Direktiven Rückrufe und Gültigkeitsbereich
- 15. Rückrufe/Promises in Firebase
- 16. Ajax synchrone Rückrufe
- 17. Versprechungen und irreguläre Rückrufe
- 18. Gleichzeitig asynchrone Rückrufe
- 19. Delegierte und Rückrufe
- 20. Update WebParts durch Rückrufe
- 21. Javascript verspricht - mehrere Rückrufe
- 22. Warten auf mehrere Rückrufe
- 23. Ajax Rückrufe in rails3
- 24. Beobachter und Rückrufe
- 25. Schienen Modell Rückrufe
- 26. CoordinatorLayout.Behavior Rückrufe lösen keine
- 27. Unterstützt GWT JSNI Rückrufe?
- 28. Aufruf Rückrufe mit Mockito
- 29. Qt Beste Kontrolle für Multi-Säulen-Liste?
- 30. Welche Qt-Containerklasse für eine sortierte Liste?
das ist fast, was ich will, aber es wird mehrere Aufgabe, die die gleiche Aktualisierungsrate haben kann. Ich entwerfe es so, dass ich in der GUI auswählen kann, welche Werte ich überwachen möchte. Vielleicht kann ich eine Liste von Enums erstellen, die einen realen Wert darstellen, der gesammelt werden muss. Wenn der Timer das Zeitlimit überschreitet, wird das Element aus der Liste abgerufen und anschließend an eine Statusmaschine weitergeleitet, die die richtige Funktion aufruft. – Talguy
Bitte beachten Sie mein Update bezüglich einer vielleicht besseren Lösung für das, was Sie versuchen zu tun. –
ok also jedes Mal, wenn einer der Timer ausgelöst wird, sollte ich innerhalb der Timeout-Funktion aufgerufen werden, starten Sie die Funktion mit QObject :: killTimer und bevor die Funktion zurückgibt es mit QObject :: startTimer? – Talguy