计时器倒计时,即使程序未运行QML

问题描述

我试图在QML / Qt项目的用户界面上进行24小时倒计时。时间应该每秒更新一次,例如23:59:59,然后是23:59:58。此外,即使应用程序未打开,我也需要时间继续关闭。因此,如果我关闭应用程序的时间是23:59:59,那么如果我在两个小时后打开它,它应该从21:59:59继续倒计时。如果计时器在应用程序未运行时已超时,则需要将其重置为24并继续。有谁知道我怎么能做到这一点,无论是QML还是连接的c ++?任何帮助将不胜感激。

解决方法

您需要根据系统时钟或等效信息存储某处计时器的结束时间。因此,在每个时刻,您都可以通过计算系统时钟的now()与计时器的结束时间之间的差来判断计时器的值。

只需使用std::this_thread::sleep_until等到您需要更新下一秒时间的确切时间即可。请勿使用sleep_for(1s),因为这样会累积不准确性。

注意:系统时钟存在可以调整的问题。我不完全了解解决方法-说您的应用程序关闭了,那么如果调整了系统时钟,如何知道经过了多少时间呢?通过将sleep_untilsteady_clock一起使用,可以在应用程序运行期间处理时钟调整。在C ++ 20中,他们引入了utc_clock,也许您可​​以通过某种方式访问​​它,这应该通过调整夏令时来解决该问题。我认为除非您可以使用GPS时钟,否则理论上不可能处理所有类型的时钟调整。