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;
}
posted @ 2024-06-30 16:24  alvinlyb  阅读(66)  评论(0)    收藏  举报