设为首页 加入收藏

TOP

Linux定时器的使用(二)
2011-12-30 13:44:41 来源: 作者: 【 】 浏览:2209
Tags:Linux 定时器 使用
 

 

sleep

下面我们来看看用sleep以及usleep怎么实现定时执行任务。

  1. #include <signal.h>
  2. #include <unistd.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. static char msg[] = "I received a msg.\n";
  6. int len;
  7. void show_msg(int signo)
  8. {
  9. write(STDERR_FILENO, msg, len);
  10. }
  11. int main()
  12. {
  13. struct sigaction act;
  14. union sigval tsval;
  15. act.sa_handler = show_msg;
  16. act.sa_flags = 0;
  17. sigemptyset(&act.sa_mask);
  18. sigaction(50, &act, NULL);
  19. len = strlen(msg);
  20. while ( 1 )
  21. {
  22. sleep(2); /*睡眠2秒*/
  23. /*向主进程发送信号,实际上是自己给自己发信号*/
  24. sigqueue(getpid(), 50, tsval);
  25. }
  26. return 0;
  27. }
  28. 看到了吧,这个要比上面的简单多了,而且你用秒表测一下,时间很准,指定2秒到了就给你输出一个字符串。所以,如果你只做一般的定时,到了时间去执行一个任务,这种方法是最简单的。

    时间差

    下面我们来看看,通过自己计算时间差的方法来定时:

     

    1. #include <signal.h>
    2. #include <unistd.h>
    3. #include <string.h>
    4. #include <stdio.h>
    5. #include <time.h>
    6. static char msg[] = "I received a msg.\n";
    7. int len;
    8. static time_t lasttime;
    9. void show_msg(int signo)
    10. {
    11. write(STDERR_FILENO, msg, len);
    12. }
    13. int main()
    14. {
    15. struct sigaction act;
    16. union sigval tsval;
    17. act.sa_handler = show_msg;
    18. act.sa_flags = 0;
    19. sigemptyset(&act.sa_mask);
    20. sigaction(50, &act, NULL);
    21. len = strlen(msg);
    22. time(&lasttime);
    23. while ( 1 )
    24. {
    25. time_t nowtime;
    26. /*获取当前时间*/
    27. time(&nowtime);
    28. /*和上一次的时间做比较,如果大于等于2秒,则立刻发送信号*/
    29. if (nowtime - lasttime >= 2)
    30. {
    31. /*向主进程发送信号,实际上是自己给自己发信号*/
    32. sigqueue(getpid(), 50, tsval);
    33. lasttime = nowtime;
    34. }
    35. }
    36. return 0;
    37. }
    38. 这个和上面不同之处在于,是自己手工计算时间差的,如果你想更精确的计算时间差,你可以把 time 函数换成gettimeofday,这个可以精确到微妙。

      上面介绍的几种定时方法各有千秋,在计时效率上、方法上和时间的精确度上也各有不同,采用哪种方法,就看你程序的需要。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇erron 和 strerror的使用 下一篇linux 定时器Timer编程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: