qtimer qt timer

Qtimer vs timerEvent-¿cuál de ellos produce menos sobrecarga?



qtimer pyqt5 (2)

Como cuestión de hecho, si necesita precisión, QT no garantiza que su temporizador se ejecute exactamente después de 1 ms.

Al menos hasta QT 4.7.X si QT tiene un evento (procesado dentro del bucle de evento) todos los temporizadores son verificados por espiración internamente (y luego levantaron sus señales) "en el bucle de evento". Quiero decir, no se ejecutarán como un evento del sistema operativo que interrumpe otras tareas, etc.

Lo que podrías obtener es un temporizador ejecutado después de 1.5 segundos si cualquier otro 3 eventos en tu ciclo necesita, por ejemplo, 0.5 segundos cada uno.

Espero que mi memoria no falle, eché un vistazo al código de temporizadores QT hace algunos meses y ahora no recuerdo si los eventos del temporizador se procesaron después de otros eventos o antes.

Espero que esto te ayude un poco más.

Necesito que se active un temporizador cada 1 ms. Este documento informa que la invocación de la ranura puede ser mucho más lenta que incluso una llamada de función virtual.

Pero si comparamos las señales / ranuras con la ocurrencia del evento, qué mecanismo será más rápido, más eficiente y producirá menos sobrecarga: QTimer con su señal de timeout() de timeout() conectada a una ranura o nulo QObject::startTimer() / QObject::killTimer() con QObject::timerEvent() ?

¿La respuesta a la pregunta anterior será la misma para Windows y Linux?


QTimer es en realidad solo un envoltorio de ranura de señal alrededor de la funcionalidad QObject::startTimer() , por lo que indudablemente tendrá más sobrecarga asociada a él en todas las plataformas (internamente implementa QObject::timerEvent() - su implementación de esta función es solo para emitir la señal de timeout() ).

De nota, QBasicTimer es un envoltorio más ligero alrededor de la funcionalidad QObject::startTimer() . Si usa QBasicTimer , todavía tiene que implementar QObject::timerEvent() , pero administra la ID del temporizador por usted. Como tal, un QBasicTimer combina parte de la facilidad de uso de un QTimer con la eficiencia del uso del mecanismo QObject::startTimer() .