【项目 进程10】2.21 alarm函数 2.22setitimer定时器函数

2.21 alarm函数

#include <unistd.h>
unsigned int alarm(unsigned int seconds);

  • 功能:设置定时器(闹钟)。函数调用,开始倒计时,当倒计时为0的时候,
    函数会给当前的进程发送一个信号:SIGALARM

  • 参数:
    seconds: 倒计时的时长,单位:秒。如果参数为0,定时器无效(不进行倒计时,不发信号)。取消一个定时器,通过alarm(0)。

  • 返回值:
    -之前没有定时器,返回0
    -之前有定时器,返回之前的定时器剩余的时间

  • SIGALARM :默认终止当前的进程,每一个进程都有且只有唯一的一个定时器。
    alarm(10); -> 返回0,之前没有定时器
    过了1秒
    alarm(5); -> 返回9,返回之前的定时器剩余的时间,但是定时器被覆盖,从此时开始 5s后发送信号

alarm(100) -> 该函数是不阻塞的,可以继续执行其他的代码

#include <stdio.h>
#include <unistd.h>

int main() {

    int seconds = alarm(5);
    printf("seconds = %d\n", seconds);  // 0

    sleep(2);
    seconds = alarm(2);    // 不阻塞
    printf("seconds = %d\n", seconds);  // 3


    //while循环的目的是,过了两秒后,倒计时为0时,函数会给当前的进程发送一个信号:SIGALARM,默认终止当前的进程。
    while(1) {

    }

    return 0;
}

最终效果:
在这里插入图片描述

1秒电脑能数多少个数

// 1秒钟电脑能数多少个数?
#include <stdio.h>
#include <unistd.h>
  
/*
    实际的时间 = 内核时间(系统调用) + 用户时间(普通代码执行) + 消耗的时间(IO操作)
    进行文件IO操作的时候比较浪费时间

    定时器,与进程的状态无关(自然定时法)。无论进程处于什么状态,alarm都会计时。
*/

int main() {    

    alarm(1);

    int i = 0;
    while(1) {
        printf("%i\n", i++);
    }

    return 0;
}

./alarm1 >> a.txt 直接写到txt,节省输出到终端的时间

2.22setitimer定时器函数

在这里插入图片描述

#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>

// 过3秒以后,每隔2秒钟定时一次
int main() {

    struct itimerval new_value;

    // 设置间隔的时间
    new_value.it_interval.tv_sec = 2;
    new_value.it_interval.tv_usec = 0;

    // 设置延迟的时间,3秒之后开始第一次定时
    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("setitimer");
        exit(0);
    }

    getchar();

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值