From 3a26279f236426f3b2bc828c006070f4020fd516 Mon Sep 17 00:00:00 2001 From: CloudSir <2301029643@qq.com> Date: Wed, 16 Feb 2022 18:38:08 +0800 Subject: [PATCH] fix timer stop --- MultiTimer.c | 1 + examples/test_linux.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/MultiTimer.c b/MultiTimer.c index bb003ff..c6e649a 100644 --- a/MultiTimer.c +++ b/MultiTimer.c @@ -53,6 +53,7 @@ int MultiTimerStart(MultiTimer* timer, uint64_t timing, MultiTimerCallback_t cal int MultiTimerStop(MultiTimer* timer) { MultiTimer** nextTimer = &timerList; + timer->is_repeated = 0; /* Find and remove timer. */ for (; *nextTimer; nextTimer = &(*nextTimer)->next) { MultiTimer* entry = *nextTimer; diff --git a/examples/test_linux.c b/examples/test_linux.c index f3412cc..81760e1 100644 --- a/examples/test_linux.c +++ b/examples/test_linux.c @@ -6,6 +6,7 @@ MultiTimer timer1; MultiTimer timer2; MultiTimer timer3; +MultiTimer timer4; uint64_t PlatformTicksGetFunc(void) { @@ -30,6 +31,17 @@ void exampleTimer3Callback(MultiTimer* timer, void *userData) MultiTimerStart(timer, 4567, exampleTimer3Callback, userData, 0); } +int count = 0; +void exampleTimer4Callback(MultiTimer* timer, void *userData) +{ + count++; + printf("[%012ld] Timer:%p callback-> %s.\r\n", PlatformTicksGetFunc(), timer, (char*)userData); + if (count >= 3) { + printf("Timer 4 stop.\n"); + MultiTimerStop(timer); + } +} + int main(int argc, char *argv[]) { MultiTimerInstall(PlatformTicksGetFunc); @@ -37,6 +49,7 @@ int main(int argc, char *argv[]) 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); + MultiTimerStart(&timer4, 2000, exampleTimer4Callback, "2000ms timer - Timer4, loop 3 times", 1); while (1) { MultiTimerYield();