linux开发4-定时器
struct itimerval
struct timeval
alarm
精度只能到秒级,并且只执行一次。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main()
{
// 1. 设置一个定时器, 定时1s
alarm(1); // 1s之后会发出一个信号, 这个信号将中断当前进程
int i = 0;
while(1)
{
printf("%d\n", i++);
}
return 0;
}
setitimer
setitimer函数可以进行周期性定时,每触发一次定时器就会发射出一个信号。
#include <signal.h>
#include <unistd.h>
#include <sys/time.h>
static int count = 0;
void printMsg(int signo)
{
printf("Get a SIGALRM,%d counts!\n",++count);
}
int main()
{
itimerval tick;
tick.it_value.tv_sec = 2;
tick.it_value.tv_usec = 0;
tick.it_interval.tv_sec = 0;
tick.it_interval.tv_usec = 500000;
signal(SIGALRM,printMsg); //信号
setitimer(ITIMER_REAL,&tick,NULL);
while (1)
{
printf("%d\n", i++);
sleep(1000000);
//pause();
}
return 0;
}
select
#include <sys/sclect.h>
void setTimer(int seconds,int useconds)
{
timeval temp;
temp.tv_sec = seconds;
temp.tv_usec = useconds;
select(0,NULL,NULL,NULL,&temp);
printf("timer interval:%ds %dus\n",seconds,useconds);
return;
}
int main()
{
for(int i=0;i<10;i++)
{
setTimer(0,500000);
}
return 0;
}
poll
使用poll()来作为毫秒精度定时器
#include <poll.h>
void setPollTime(int mseconds)
{
struct pollfd fds[1];
fds[0].fd = 0;
fds[0].events = POLLIN;
poll(fds,1,mseconds);
printf("this is poll timer\n");
}
int main()
{
for(int i=0;i<10;i++)
{
setPollTime(2000);
}
return 0;
}

浙公网安备 33010602011771号