- /*
- #include <unistd.h>
- unsigned int alarm(unsigned int seconds);
- 功能:设置定时器。函数调用,开始倒计时,0的时候给当前的进程发送SIGALARM信号
- 参数:倒计时的时长。。单位:秒 如果参数为0,无效
- 返回值:倒计时剩余的时长
- -之前没有定时器,返回0
- -之前有定时器,返回之前的定时器剩余的时间
-
- SIGALARM:默认终止当前的进程,每一个进程有且仅有唯一的定时器
-
- 函数不阻塞
- */
- #include<stdio.h>
- #include<unistd.h>
- int main() {
- int second = alarm(5);
- printf("seconds = %d\n", second);
- sleep(2);
- second = alarm(2);
- printf("seconds = %d\n", second);
-
- while(1){
-
- }
- return 0;
- }
后面新设的定时器会取代老的定时器
定时与进程的状态无关,无论进程是阻塞,挂起,就绪,运行定时器都是自己玩自己的
- /*
- #include <sys/time.h>
- int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);
- 功能:设置定时器(闹钟)。可以替代alarm函数。精度微秒,可以实现周期性的定时。
- 参数:
- -which:定时器以什么方式计时
- -ITIMER_REAL:真实时间,时间到达,发送SIGALRM 常用
- -ITIMER_VIRTUAL:用户时间,时间到达,发送SIGVTALRM
- -ITIMER_PROF:一该进程在用户态和内核态下所消耗的时间来计算,时间到达,发送SIGPROF信号
- -new_value:设置定时器的属性
- struct itimerval {
- struct timeval it_interval; 每个阶段的倒计时时长
- struct timeval it_value; 延迟多长时间执行定时器
- };
-
- struct timeval {
- time_t tv_sec; 秒数
- suseconds_t tv_usec; 微秒
- };
- -old_value:记录上次定时的时间参数
- 返回值:成功0 失败-1
- */
- #include <sys/time.h>
- #include<stdio.h>
- #include<unistd.h>
-
- int main() {
-
- struct itimerval new_value;
- new_value.it_interval.tv_sec = 2;
- new_value.it_interval.tv_usec = 0;
- new_value.it_value.tv_sec = 3;
- new_value.it_value.tv_usec = 0;
-
- int ret = setitimer(ITIMER_REAL, &new_value, NULL);
- printf("开始\n");
- if(ret == -1) {
- perror("ret");
- return 0;
- }
- while(1) {
- printf("1\n");
- sleep(1);
- }
- return 0;
- }
延迟三秒开始执行就会立马发送信号,然后每隔两秒发送一次