Действительно ли QElapsedTimer создает таймер?
Вопрос
QTimer
похоже, на самом деле создает «таймер», который потребляет такты ЦП и публикует события и т. д.Верно ли то же самое для QElapsedTimer
?
Или это что-то вроде Win32? GetTickCount
где, когда вы вызываете метод QElapsedTimer
он захватывает текущий счетчик тиков и вычитает его из счетчика, с которого он был запущен?
Я хочу знать, хорошая ли идея держать эти вещи под рукой, или они будут жрать батарею, как QTimer
?
Решение
QTimer
«ест» батарею только в некоторых случаях.В частности, если это Qt::PreciseTimer
в Windows 7 и более ранних версиях — в этих системах тактовая частота увеличится до 1000 Гц.Очень короткие таймеры будут вызывать такое же поведение.Поскольку эти системы нет без такта, наличие активного грубого таймера никак не влияет на энергопотребление, поскольку система тикает с фиксированной скоростью, независимо от того, нужно это или нет.
В безтиковой операционной системе QTimer
не имеет таких неприятных последствий.Сюда входят OS X/xnu, Windows 8 или бестактный Linux.
QElapsedTimer
это не QObject
и не предоставляет никаких асинхронных событий.Он просто предоставляет интерфейс для API-интерфейсов времени платформы (нет API таймера).