嵌入式学习——3——超时timeout

1、自带超时参数的函数

select自带超时

定义超时时间变量

struct timeval tv = {5, 0};

while(1) {

        tv.tv_sec = 5;

        tv.tv_usec = 0;

        int res = select(1, &readfds, NULL, NULL, &tv);

        .....

}

poll自带超时

1、poll函数的第三个参数,是以毫秒为单位的超时时间

2、当时间到达后,会接触阻塞,进而做相关事情

3、是一个整型变量,值传递

int res = poll(&pfd, 1, 5000);

2、setsockopt ---   SO_RCVTIMEO

//设置接收超时时间

struct timeval tv = {5, 0};

if(setsockopt(sfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv))==-1) {

        perror("setsockopt error");

        return -1;

}

3、alarm  ----  SIGALRM

#include <unistd.h>

unsigned int alarm(unsigned int seconds);

功能:设置一个定时器,在时间到达后,会发射一个SIGALRM的信号

参数:以秒为单位的时间, 如果参数设置成0,表示取消该定时器

返回值:如果该定时器之前没有定时器,则返回0,如果该定时器之前有定时器,会返回上一个定时器剩余的秒数,并更新上一个定时器为该定时器

关键词:alarm(5);     SIGALRM

void handle(int signo) {
    if (signo == SIGALRM) {
        printf("alarm\n");
        alarm(3);
        return;
    }
}
int main(int argc, char const *argv[]) {
    if (signal(SIGALRM, handle) == SIG_ERR) {
        printf("signal error\n");
        return -1;
    }
    alarm(3);
    while (1) {
    }

    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值