2016-02-29 81 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版本,並且這次它工作。在之前的嘗試中,一定會搞砸了一些東西。謝謝你讓我再試一次。 –