add param: is_repeated

pull/12/head
CloudSir 4 years ago
parent 5f06643d12
commit 4ea0d39162

@ -13,7 +13,7 @@ int MultiTimerInstall(PlatformTicksFunction_t ticksFunc)
return 0;
}
int MultiTimerStart(MultiTimer* timer, uint64_t timing, MultiTimerCallback_t callback, void* userData)
int MultiTimerStart(MultiTimer* timer, uint64_t timing, MultiTimerCallback_t callback, void* userData, uint8_t is_repeated)
{
if (!timer || !callback ) {
return -1;
@ -29,8 +29,10 @@ int MultiTimerStart(MultiTimer* timer, uint64_t timing, MultiTimerCallback_t cal
/* Init timer. */
timer->deadline = platformTicksFunction() + timing;
timer->timeout = timing;
timer->callback = callback;
timer->userData = userData;
timer->is_repeated = is_repeated;
/* Insert timer. */
for (nextTimer = &timerList;; nextTimer = &(*nextTimer)->next) {
@ -76,6 +78,9 @@ int MultiTimerYield(void)
/* call callback */
if (entry->callback) {
entry->callback(entry, entry->userData);
if(entry->is_repeated == 1) {
MultiTimerStart(entry, entry->timeout, entry->callback, entry->userData, 1);
}
}
}
return 0;

@ -37,7 +37,9 @@ typedef void (*MultiTimerCallback_t)(MultiTimer* timer, void* userData);
struct MultiTimerHandle {
MultiTimer* next;
uint64_t timeout;
uint64_t deadline;
uint8_t is_repeated;
MultiTimerCallback_t callback;
void* userData;
};
@ -57,9 +59,10 @@ int MultiTimerInstall(PlatformTicksFunction_t ticksFunc);
* @param timing Set the start time.
* @param callback deadline callback.
* @param userData user data.
* @param is_repeated repeat(1) or not(0).
* @return int 0: success, -1: fail.
*/
int MultiTimerStart(MultiTimer* timer, uint64_t timing, MultiTimerCallback_t callback, void* userData);
int MultiTimerStart(MultiTimer* timer, uint64_t timing, MultiTimerCallback_t callback, void* userData, uint8_t is_repeated);
/**
* @brief Stop the timer work, remove the handle off work list.

@ -24,7 +24,7 @@ MultiTimer timer1;
3. 设置定时时间,超时回调处理函数, 用户上下指针,启动定时器;
```c
int MultiTimerStart(&timer1, uint64_t timing, MultiTimerCallback_t callback, void* userData);
int MultiTimerStart(&timer1, uint64_t timing, MultiTimerCallback_t callback, void* userData, uint8_t is_repeated);
```
4. 在主循环调用定时器后台处理函数
@ -71,27 +71,26 @@ uint64_t PlatformTicksGetFunc(void)
void exampleTimer1Callback(MultiTimer* timer, void *userData)
{
printf("exampleTimer1Callback-> %s.\r\n", (char*)userData);
MultiTimerStart(timer, 1000, exampleTimer1Callback, userData);
}
void exampleTimer2Callback(MultiTimer* timer, void *userData)
{
printf("exampleTimer2Callback-> %s.\r\n", (char*)userData);
printf("exampleTimer2Callback-> %s.\r\n", (char*)userData, 0);
}
void exampleTimer3Callback(MultiTimer* timer, void *userData)
{
printf("exampleTimer3Callback-> %s.\r\n", (char*)userData);
MultiTimerStart(timer, 4567, exampleTimer3Callback, userData);
MultiTimerStart(timer, 4567, exampleTimer3Callback, userData, 0);
}
int main(int argc, char *argv[])
{
MultiTimerInstall(PlatformTicksGetFunc);
MultiTimerStart(&timer1, 1000, exampleTimer1Callback, "1000ms CYCLE timer");
MultiTimerStart(&timer2, 5000, exampleTimer2Callback, "5000ms ONCE timer");
MultiTimerStart(&timer3, 3456, exampleTimer3Callback, "3456ms delay start, 4567ms CYCLE timer");
MultiTimerStart(&timer1, 1000, exampleTimer1Callback, "1000ms CYCLE timer", 1);
MultiTimerStart(&timer2, 5000, exampleTimer2Callback, "5000ms ONCE timer", 0);
MultiTimerStart(&timer3, 3456, exampleTimer3Callback, "3456ms delay start, 4567ms CYCLE timer", 0);
while (1) {
MultiTimerYield();

@ -17,7 +17,6 @@ uint64_t PlatformTicksGetFunc(void)
void exampleTimer1Callback(MultiTimer* timer, void *userData)
{
printf("[%012ld] Timer:%p callback-> %s.\r\n", PlatformTicksGetFunc(), timer, (char*)userData);
MultiTimerStart(timer, 1000, exampleTimer1Callback, userData);
}
void exampleTimer2Callback(MultiTimer* timer, void *userData)
@ -28,16 +27,16 @@ void exampleTimer2Callback(MultiTimer* timer, void *userData)
void exampleTimer3Callback(MultiTimer* timer, void *userData)
{
printf("[%012ld] Timer:%p callback-> %s.\r\n", PlatformTicksGetFunc(), timer, (char*)userData);
MultiTimerStart(timer, 4567, exampleTimer3Callback, userData);
MultiTimerStart(timer, 4567, exampleTimer3Callback, userData, 0);
}
int main(int argc, char *argv[])
{
MultiTimerInstall(PlatformTicksGetFunc);
MultiTimerStart(&timer1, 1000, exampleTimer1Callback, "1000ms CYCLE timer");
MultiTimerStart(&timer2, 5000, exampleTimer2Callback, "5000ms ONCE timer");
MultiTimerStart(&timer3, 3456, exampleTimer3Callback, "3456ms delay start, 4567ms CYCLE timer");
MultiTimerStart(&timer1, 1000, exampleTimer1Callback, "1000ms CYCLE timer", 1);
MultiTimerStart(&timer2, 5000, exampleTimer2Callback, "5000ms ONCE timer", 0);
MultiTimerStart(&timer3, 3456, exampleTimer3Callback, "3456ms delay start, 4567ms CYCLE timer", 0);
while (1) {
MultiTimerYield();

Loading…
Cancel
Save