C++

C/C++使用信号实现超时功能

socket超时

Posted by bbkgl on October 11, 2019

若教眼底无离恨

不信人间有白头

Python可以通过装饰器实现函数的超时,C/C++就得想点别的办法了,可以借助一个操作系统的信号机制。

网上资料很多,这里我直接放代码,一看就懂,其实就调用了两个系统调用。

#include <signal.h>
#include <cstdio>
#include <unistd.h>

void handle(int sig) {
    printf("The signal(%d).\n", sig);
}

int main() {
    signal(SIGALRM, handle);
    alarm(5);
    sleep(80);
    alarm(0);
    sigrelse(SIGALRM);
    printf("Quit\n");
    return 0;
}

输出:

The signal(14).
Quit

也就是时间到了以后,执行信号处理函数handle(),然后就回到sigrelse(SIGALRM)清除信号。

很简单很实用2333。