2022-1-22 牛客C++项目 —— alarm 函数

/*
 #include <unistd.h>
unsigned int alarm(unsigned int seconds);
-功能:设置定时闹钟,函数调用的时候开始计时,当倒计时为 0 的时候。
函数会给当前的进程发送一个信号 SIGALARM
-参数:second 倒计时时长,单位:秒。如果参数为 0 ,则计时器无效(不进行倒计时,不发送信号)
取消一个计时器可以通过将参数设置为 0 alarm(0)
-返回值:
-0 之前没有定时器
-之前有定时器,返回之前的定时器剩余的时间
alarm(10);->返回 0
sleep(1);
alarm(5);->返回 9

alarm(100);默认是不阻塞的
SIGALARM 默认终止当前的进程,每一个进程都有且只有一个唯一的定时器
以最后一个次调用 alarm 为准,之前的都会失效。
*/
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main(void){
    int seconds = alarm(5);//0
    printf("seconds = %d\n",seconds);

    sleep(2);
    seconds = alarm(10);//3 新开一个就是重新开始计时
    printf("seconds = %d\n",seconds);//由于 alarm 不阻塞,所以会是立刻打印

    while (1)
    {
        /* code */
    }
    
}

在这里插入图片描述

//测试电脑一秒以内能够数多少个数字
#include<unistd.h>
#include<stdio.h>
int main(void){
    alarm(1);
    int i = 0;
    while (1)
    {
        printf("i = %d.\n",i++);
    }
    return 0;
    
}

实际运行的感觉是程序执行了好多秒,因为向终端输出的过程中,涉及到大量的 I/O 操作需要时间。
在这里插入图片描述
可以将终端的输出重定向到一个文件当中。
在这里插入图片描述
a.txt 荣升成为大型的文件

在这里插入图片描述
猜测减少输出的字符个数只会更大,果然如此。
在这里插入图片描述

程序运行的时间 = 内核时间(系统调用 )+ 用户时间(用户自身的代码 ) + 其他消耗的时间(I/O 操作)
进行文件的 I/O 操作比较浪费时间。
以及内核和用户的切换也耗费时间。

定时器和进程的状态无关,属于自然时间。
无论程序处于什么状态, alarm()都会计时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值