本文目录一览:
求linux下用c语言编写的定时器程序
定时器就相当于系统每隔一段时间给进程发一个定时信号。在linux里面有一种进程中信息传递的方法,那就是信号,定时器程序就是需要定义一个信号处理函数。利用定时器产生的一个信号SIGALRM信号,在收到该信号同时会调用do_alarm函数。这也就类似单片机的定时中断,当定时到了,就跳到中断服务函数里去执行相应的程序。 Linux操作系统为每一个进程提供了3个内部间隔计时器. ITIMER_REAL:减少实际时间.到时的时候发出SIGALRM信号. ITIMER_VIRTUAL:减少有效时间(进程执行的时间).产生SIGVTALRM信号. ITIMER_PROF:减少进程的有效时间和系统时间(为进程调度用的时间).这个经常和上面一个使用用来计算系统内核时间和用户时间.产生SIGPROF信号. 代码如下:pre t="code" l="cpp"#include stdio.h
#include time.h
#include sys/time.h
#include stdlib.h
#include signal.h
static int count = 0;
static struct itimerval oldtv;
void set_timer()
{
struct itimerval itv;
itv.it_interval.tv_sec = 1;
itv.it_interval.tv_usec = 0;
itv.it_value.tv_sec = 1;
itv.it_value.tv_usec = 0;
setitimer(ITIMER_REAL, itv, oldtv);
}
void signal_handler(int m)
{
count ++;
printf("%d\n", count);
}
int main()
{
signal(SIGALRM, signal_handler);
set_timer();
while(count 10000);
exit(0);
return 1;
}
linux下C语言定时器(求高人指点)
可以用alarm信号做:
alarm(设置信号传送闹钟)
相关函数 signal,sleep
表头文件 #includeunistd.h
定义函数 unsigned int alarm(unsigned int seconds);
函数说明 alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds 为0,则之前设置的闹钟会被取消,并将剩下的时间返回。
返回值返回之前闹钟的剩余秒数,如果之前未设闹钟则返回0。
#includeunistd.h
#includesignal.h
void handler() {
//这里读跳变次数
}
main()
{
int i;
signal(SIGALRM,handler);//这里设置时钟信号的响应函数
alarm(1); //这里设置每一秒钟发送一个时钟信号
}
linux下C语言有没有定时调用的函数
你是指延迟函数还是定时调用,比如到11:12:13秒执行某个函数?
如果是延时函数用
usleep(usec); // 微妙
sleep(sec); // 秒
如果是定时执行的话,你只能开个线程或while,每隔1s判断下当前系统时间,
struct tm *ptm;
long ts;
int y,m,d,h,n,s;
ts = time(NULL);
ptm = localtime(ts);
y = ptm- tm_year+1900; //年
m = ptm- tm_mon+1; //月
d = ptm- tm_mday; //日
h = ptm- tm_hour; //时
n = ptm- tm_min; //分
s = ptm- tm_sec; //秒
照着上面的格式组成字符串进行判断,到点了就执行就可以了