《如何在Linux下实现定时器》由会员分享,可在线阅读,更多相关《如何在Linux下实现定时器(5页珍藏版)》请在金锄头文库上搜索。
1、如何在如何在 LinuxLinux 下实现定时器下实现定时器在 Linux 实现一个定时器,不像 Win32 下那样直观。在 Win32 调用 SetTimer 就行了,在 Linux 下则没有相应函数可以直接调用。定时器作为一个常用的功能,在 Linux 当然也有相应实现。下面我们看看几种常用的方法。要实现定时器功能,最土的办法实现莫过于用 sleep/usleep 来实现了。当然,它会阻塞当前线程,除了处理定时功能外,什么活也干不了。当然要解决这个问题不难,创建一个单独的线程来负责定时器,其它线程负责正常的任务就行了。要实现定时器功能,最简单的办法就是 ALARM 信号。这种方法简单,也相
2、应的缺陷:用信号实现效率较低; 最小精度为 1 秒,无法实现高精度的定义器。简单示例:i nclude i nclude static void timer(int sig)if(sig = SIGALRM)printf(“timern“);return;int main(int argc, char* argv)signal(SIGALRM, timer);alarm(1);getchar();return 0;(setitimer 和alarm有类似的功能,也是通过信号来实现)最优雅的方法是使用 RTC 机制。利用 select 函数,你可以用单线程实现定时器,同时还可以处理其它任务。简单
3、示例:i nclude i nclude i nclude i nclude i nclude i nclude i nclude i nclude int main(int argc, char* argv)unsigned long i = 0;unsigned long data = 0;int retval = 0;int fd = open (“/dev/rtc“, O_RDONLY);if(fd i nclude i nclude i nclude i nclude int count = 0;void set_timer()struct itimerval itv, oldtv;itv.it_interval.tv_sec = 1;itv.it_interval.tv_usec = 0;itv.it_value.tv_sec = 5;itv.it_value.tv_usec = 0;setitimer(ITIMER_REAL, void sigalrm_handler(int sig)count+;printf(“timer signal. %dn“, count);int main()signal(SIGALRM, sigalrm_handler);set_timer();while (count 30)exit(0);