2016-02-29 43 views
0

我写了一个非常基本的应用程序“Nag for Pebble” - 它所做的只是在给定的时间间隔内唤醒,然后重新安排下次唤醒并立即退出应用程序。所以效果是 - “背景”在给定的时间间隔嗡嗡声。Wakup API:唤醒时间不一致

问题是 - 即使实际时间一致,唤醒之间的时间也会不断增加。我正在做这样的事情:

time_t next= time(NULL); 
next += buzz_interval*60; 
wakeup_schedule(next, 0, false); 

因此,如果buzz_interval是5分钟,它会每5分钟醒来。问题是在唤醒之后的一段时间内,这些问题首先难以察觉,然后错误累积起来。不知道是什么原因造成的,以及如何补偿。

这里的complete source如果需要。

更新:下面是一个日志,显示下一次唤醒(下一次)下一个实际唤醒时间(当前时间)的计划时间。正如你在几次醒来之后可以看到的那样,它会增加一秒,然后再增加两秒。 Welp,

[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 

回答

1

我认为它是有道理的,它会略微增加,并且增加是从应用程序打开和执行代码所需的时间。

确保以一致的时间间隔调度唤醒的一种方法是保持一个持久变量(https://developer.pebble.com/guides/pebble-apps/app-structure/persistent-storage/),其中包含第一个蜂鸣器被蜂鸣的时间,并且通过一些计算,您可以计算出下一个蜂鸣器的确切时间应该安排。

+0

有趣的是,我的想法也来了。而且我做了一个测试,只在最初开始时读取系统时间,然后继续增加持续值 - 它具有相同的副作用。要再试一次,也许我错过了一些东西,但恐怕它不是罪魁祸首。 –

+0

带持久存储的Redid版本,并且这次它工作。在之前的尝试中,一定会搞砸了一些东西。谢谢你让我再试一次。 –