sleep使用的是alarm之类的定时器,定时器是使得进程被挂起,使进程处于就绪的状态。
signal+alarm定时器
alarm参数的类型为uint, 并且不能填0
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
#include <signal.h>
void sigalrm_fn(int sig)
{
printf("alarm!
");
alarm(0.1);
return;
}
int main(void)
{
signal(SIGALRM, sigalrm_fn); //后面的函数必须是带int参数的
alarm(1);
while(1);
pause();
}
比alarm精度更高的定时器
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/time.h>
void test_func()
{
static count = 0;
printf("count is %d
", count++);
}
void init_sigaction()
{
struct sigaction act;
act.sa_handler = test_func; //设置处理信号的函数
act.sa_flags = 0;
sigemptyset(&act.sa_mask);
sigaction(SIGPROF, &act, NULL);//时间到发送SIGROF信号
}
void init_time()
{
struct itimerval val;
val.it_value.tv_sec = 0; //1秒后启用定时器
val.it_value.tv_usec = 1;
val.it_interval = val.it_value; //定时器间隔为1s
setitimer(ITIMER_PROF, &val, NULL);
}
int main(int argc, char **argv)
{
init_sigaction();
init_time();
while(1);
return 0;
}