linux的内核时钟刷新率是10ms(x86平台)。
但如果40ms那当然是可以的,因为那是4个10ms。
处理过程其实就是安装一个SIGALRM的信号处理函数。
1.#include <sys/time.h>
2.调用setitimer安装定时器:
它有三个参数第一个设ITIMER_REAL,第二和三个参数是新的时钟间隔和之前设置的时钟间隔。
struct itimerval {
struct timeval it_interval; //设为时钟间隔 40ms,既it_interval.tv_sec=0;it_interval.tv_usec=40*1000; tv_usec是微秒
struct timeval it_value; //设为第一次触发的时钟间隔,其实只被执行一次,以后按照it_interval的值,这里你也可以同上设。
}
3.调用sigaction安装SIGALRM的处理函数,我就不细说了
#include <sys/select.h>
#include <stdio.h>
#include <stdlib.h>
void Timer(int sec, long usec)
{
struct timeval tvSelect;
tvSelect.tv_sec = sec;
tvSelect.tv_usec = usec;
select(FD_SETSIZE, NULL, NULL, NULL, &tvSelect);
};
int main()
{
printf("--- begin ---");
Timer(3, 1000*500);
printf("--- bye ---");
}