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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具