Qtimer vs timerEvent -, die von Ihnen produziert weniger overhead?
Ich brauche einen timer ausgelöst werden, die alle 1 ms. Diese Dokument berichtet, dass die slot-Aufruf kann langsamer sein, als auch eine virtual Funktion call.
Aber wenn wir vergleichen Signale/slots mit Ereignis-auftreten, welchen Mechanismus wird schneller, effizienter und produziert weniger overhead: QTimer
mit timeout()
- signal verbunden sein, um einen Schlitz oder blanke QObject::startTimer()
\ QObject::killTimer()
mit QObject::timerEvent()
?
Wird die Antwort für die obige Frage, dass das gleiche für Windows und Linux?
Du musst angemeldet sein, um einen Kommentar abzugeben.
QTimer
ist eigentlich nur eine signal-slot-wrapper um dieQObject::startTimer()
- Funktionalität, so dass es wird sicherlich noch mehr Aufwand mit der es auf allen Plattformen (intern implementiertQObject::timerEvent()
-- der Durchführung dieser Funktion ist nur zum emittieren dietimeout()
signal).Ist zu beachten, dass
QBasicTimer
ist eine mehr Licht-Gewicht wrapper um dieQObject::startTimer()
Funktionalität. Wenn SieQBasicTimer
Sie noch umsetzen müssenQObject::timerEvent()
, aber es verwaltet die timer-ID für Sie. Als solche, eineQBasicTimer
kombiniert einige der ease-of-use einerQTimer
mit der Effizienz der Verwendung derQObject::startTimer()
Mechanismus.Als eine Angelegenheit von der Tat, wenn Sie brauchen Präzision, QT nicht garantiert, dass dein timer wird ausgeführt genau nach 1ms.
Zumindest bis QT 4.7.X hat der Auftragnehmer ein Ereignis (bearbeitet im inneren der event-Schleife) alle Timer werden überprüft Ablauf intern (und dann hob Sie Ihre Signale) "in die Ereignis-Schleife". Ich meine, Sie wird nicht ausgeführt werden, da ein OS event, dass interrupts von anderen Aufgaben, etc.
Was Sie bekommen konnte ist ein timer ausgeführt, nach 1,5 Sekunden, wenn alle anderen 3 events in deiner Schleife benötigen, beispielsweise 0,5 s jeder.
Ich hoffe, dass meine Erinnerung nicht versagt, ich habe einen Blick auf QT Timer-code vor einigen Monaten und jetzt kann ich mich nicht erinnern, ob timer-Ereignisse verarbeitet werden, die nach anderen Veranstaltungen oder vor.
Hoffe, das hilft Euch ein bisschen mehr.