针对一次性的动作,最简单的就是使用signal和alarm函数来调用。
假如在callback函数未执行的时候,要取消的话,那么可以使用alarm(0)来取消调用该回调函数。我们用如下的代码来测试(看输出的全局变量的值):
- #include <stdio.h>
- #include <stdbool.h>
- #include <string.h>
- #include <errno.h>
- #include <signal.h>
- #include <unistd.h>
-
-
- int Value;
-
- void callback_onAlarm(int param);
-
- int main(void)
- {
- printf("Main thread\n");
-
- Value = 10;
- signal(SIGALRM, callback_onAlarm);
- printf("<start alarm1>\n");
- alarm(10);
-
- sleep(5);
-
- alarm(0);
- Value = 50;
- signal(SIGALRM, callback_onAlarm);
- printf("<start alarm2>\n");
- alarm(10);
-
- while(1);
-
- return 0;
- }
-
- void callback_onAlarm(int param)
- {
- printf("Alarm callback, Value is %d\n", Value);
- alarm(0);
- }
复制代码
以上的代码,其输出的结果如下:
- Main thread
- <start alarm1>
- <start alarm2>
- Alarm callback, Value is 50
复制代码
|