您可以在Linux上使用setitimer(2)在给定的时间后获取SIGVTALRM
这是你设置计时器的方法:
#include <sys/time.h>
/* Start a timer that expires after 2.5 seconds */
struct itimerval timer;
timer.it_value.tv_sec = 2;
timer.it_value.tv_usec = 500000;
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = 0;
setitimer (ITIMER_VIRTUAL, &timer, 0);
Run Code Online (Sandbox Code Playgroud)
请注意,SIGVTALRM的默认处理程序将终止程序并显示错误.它在技术上会起作用,但是如果你想干净利落地处理它,你可以像这样安装一个信号处理程序:
#include <signal.h>
#include <stdio.h>
#include <string.h>
void timer_handler (int signum)
{
printf ("Timed out!\n");
}
/* Install timer_handler as the signal handler for SIGVTALRM. */
struct sigaction sa;
memset (&sa, 0, sizeof (sa));
sa.sa_handler = &timer_handler;
sigaction (SIGVTALRM, &sa, 0);
Run Code Online (Sandbox Code Playgroud)
当然,这只适用于Linux(也许适用于Mac/BSD).