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 @   alvinlyb  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示