唤醒API:唤醒时间不一致
Wakup API: waking timing is not consistent
我写了一个非常基本的应用程序“Nag for Pebble”——它所做的只是在给定的时间间隔唤醒并发出嗡嗡声,重新安排下一次唤醒并立即退出应用程序。所以效果是 - "background" 以给定的时间间隔发出嗡嗡声。
问题是 - 唤醒之间的时间不断增加,即使实际时间是一致的。我正在做这样的事情:
time_t next= time(NULL);
next += buzz_interval*60;
wakeup_schedule(next, 0, false);
所以如果 buzz_interval 是 5 分钟,它将每 5 分钟唤醒一次。问题是一段时间后唤醒之间的时间不断增加,首先是不可察觉的,然后错误会累积。不确定是什么原因造成的以及如何补偿它。
如果需要,请complete source。
更新: 这是一个日志,显示下一次唤醒的预定时间(下一次),然后是实际唤醒时间(当前时间)。正如您所看到的,在几次醒来后,它增加了一秒钟,然后是两秒钟。好吧,
[DEBUG] main.c:24: Current time = 20:49:59
[DEBUG] main.c:25: Buzz Interval = 1, buzz_start = 0
[DEBUG] main.c:66: Next time = 20:50:59
[DEBUG] main.c:24: Current time = 20:50:59
[DEBUG] main.c:25: Buzz Interval = 1, buzz_start = 0
[DEBUG] main.c:66: Next time = 20:51:59
[DEBUG] main.c:24: Current time = 20:52:00
[DEBUG] main.c:25: Buzz Interval = 1, buzz_start = 0
[DEBUG] main.c:66: Next time = 20:53:00
[DEBUG] main.c:24: Current time = 20:53:00
[DEBUG] main.c:25: Buzz Interval = 1, buzz_start = 0
[DEBUG] main.c:66: Next time = 20:54:00
[DEBUG] main.c:24: Current time = 20:54:00
[DEBUG] main.c:25: Buzz Interval = 1, buzz_start = 0
[DEBUG] main.c:66: Next time = 20:55:00
[DEBUG] main.c:24: Current time = 20:55:01
[DEBUG] main.c:25: Buzz Interval = 1, buzz_start = 0
[DEBUG] main.c:66: Next time = 20:56:01
[DEBUG] main.c:24: Current time = 20:56:01
[DEBUG] main.c:25: Buzz Interval = 1, buzz_start = 0
[DEBUG] main.c:66: Next time = 20:57:01
[DEBUG] main.c:24: Current time = 20:57:03
我认为它会略有增加是有道理的,增加是从应用程序打开和执行代码所花费的时间开始的。
确保以一致的时间间隔安排唤醒的一种方法是保留一个持久变量 (https://developer.pebble.com/guides/pebble-apps/app-structure/persistent-storage/),其中包含第一个蜂鸣器响起的时间,并通过一些计算,您可以计算出确切的时间应该安排下一个蜂鸣器的时间。
我写了一个非常基本的应用程序“Nag for Pebble”——它所做的只是在给定的时间间隔唤醒并发出嗡嗡声,重新安排下一次唤醒并立即退出应用程序。所以效果是 - "background" 以给定的时间间隔发出嗡嗡声。
问题是 - 唤醒之间的时间不断增加,即使实际时间是一致的。我正在做这样的事情:
time_t next= time(NULL);
next += buzz_interval*60;
wakeup_schedule(next, 0, false);
所以如果 buzz_interval 是 5 分钟,它将每 5 分钟唤醒一次。问题是一段时间后唤醒之间的时间不断增加,首先是不可察觉的,然后错误会累积。不确定是什么原因造成的以及如何补偿它。
如果需要,请complete source。
更新: 这是一个日志,显示下一次唤醒的预定时间(下一次),然后是实际唤醒时间(当前时间)。正如您所看到的,在几次醒来后,它增加了一秒钟,然后是两秒钟。好吧,
[DEBUG] main.c:24: Current time = 20:49:59
[DEBUG] main.c:25: Buzz Interval = 1, buzz_start = 0
[DEBUG] main.c:66: Next time = 20:50:59
[DEBUG] main.c:24: Current time = 20:50:59
[DEBUG] main.c:25: Buzz Interval = 1, buzz_start = 0
[DEBUG] main.c:66: Next time = 20:51:59
[DEBUG] main.c:24: Current time = 20:52:00
[DEBUG] main.c:25: Buzz Interval = 1, buzz_start = 0
[DEBUG] main.c:66: Next time = 20:53:00
[DEBUG] main.c:24: Current time = 20:53:00
[DEBUG] main.c:25: Buzz Interval = 1, buzz_start = 0
[DEBUG] main.c:66: Next time = 20:54:00
[DEBUG] main.c:24: Current time = 20:54:00
[DEBUG] main.c:25: Buzz Interval = 1, buzz_start = 0
[DEBUG] main.c:66: Next time = 20:55:00
[DEBUG] main.c:24: Current time = 20:55:01
[DEBUG] main.c:25: Buzz Interval = 1, buzz_start = 0
[DEBUG] main.c:66: Next time = 20:56:01
[DEBUG] main.c:24: Current time = 20:56:01
[DEBUG] main.c:25: Buzz Interval = 1, buzz_start = 0
[DEBUG] main.c:66: Next time = 20:57:01
[DEBUG] main.c:24: Current time = 20:57:03
我认为它会略有增加是有道理的,增加是从应用程序打开和执行代码所花费的时间开始的。
确保以一致的时间间隔安排唤醒的一种方法是保留一个持久变量 (https://developer.pebble.com/guides/pebble-apps/app-structure/persistent-storage/),其中包含第一个蜂鸣器响起的时间,并通过一些计算,您可以计算出确切的时间应该安排下一个蜂鸣器的时间。