免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7670 | 回复: 11
打印 上一主题 下一主题

求助 linux下有关时间间隔的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-09 14:32 |只看该作者 |倒序浏览
我想实现 在某一个时间间隔后 循环执行某一个动作

我尝试用
struct timeval time;
memset(&time, 0, sizeof(timeval));
time.tc_sec = 1;
time.tv_usec = 0;
select(NULL, NULL, NULL, NULL, &time);

但是系统提示
/usr/include/linux/time.h:9: redefinition of `struct timespec'
/usr/include/linux/time.h:19: syntax error before "suseconds_t"
/usr/include/linux/time.h:43: redefinition of `struct itimerspec'
/usr/include/linux/time.h:49: field `it_interval' has incomplete type
/usr/include/linux/time.h:50: field `it_value' has incomplete type

不知道大家还有什么其他的实现方法?

[ 本帖最后由 karl412 于 2007-5-9 14:56 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-05-09 14:40 |只看该作者
原帖由 karl412 于 2007-5-9 14:32 发表
我想实现 在某一个时间间隔后 循环执行某一个动作

我尝试用
struct timeval time;
memset(&time, 0, sizeof(timeval));
time.tc_sec = 1;
time.tv_usec = 0;
select(NULL, NULL, NULL, NULL, &t ...


如果只要求到秒的话,用sleep吧

论坛徽章:
0
3 [报告]
发表于 2007-05-09 14:42 |只看该作者
是这样的 我在每一秒钟 让一个进程发30个包 但是发完这30个包 并不需要1秒钟 所以剩下的时间 我希望他等待 等到下一秒开始 ---- 也就是实现 每一秒发送30个包

如果是sleep的话 这一秒 不能执行任何动作

论坛徽章:
0
4 [报告]
发表于 2007-05-09 14:49 |只看该作者
原帖由 karl412 于 2007-5-9 14:42 发表
是这样的 我在每一秒钟 让一个进程发30个包 但是发完这30个包 并不需要1秒钟 所以剩下的时间 我希望他等待 等到下一秒开始 ---- 也就是实现 每一秒发送30个包

如果是sleep的话 这一秒 不能执行任何动作


你上面select的用法跟sleep的区别就是它更精确
还有就是你没有办法事先判断每次发完这30个包是不是都在1秒内

如果假设每次都在一秒内的话,
你需要:
计算发送30个包花了多少时间;
然后用select来等待1秒减去上面的时间.

论坛徽章:
0
5 [报告]
发表于 2007-05-09 14:55 |只看该作者
嗯 刚刚查了一下《UNIX环境高级编程》 的确是我记错了
select相当于sleep

那我想实现 在某一时间区域内 比如说5秒内 让程序发送10个包 然后下5秒 再发送10个包 如此循环下去
我该如何实现呢? 如何控制程序实现这样的流程?

我开始试图使用
time_t curtime;
time_t lasttime;
time_t elapse;
lasttime = 0;
while(1)
{
      time(&curtime);
      if((curtime - lasttime) > elapse){            
             run();/*执行动作*/
       lasttime = curtime;
      }
}

我开始使用这样的模式尝试 不过我使用ctime打印出elapse的结果
是一个日期 我如果想让他每5秒就run()一次 我该如何设置我的elapse?

[ 本帖最后由 karl412 于 2007-5-9 15:03 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2007-05-09 15:00 |只看该作者
原帖由 karl412 于 2007-5-9 14:32 发表
我想实现 在某一个时间间隔后 循环执行某一个动作

我尝试用
struct timeval time;
memset(&time, 0, sizeof(timeval));
time.tc_sec = 1;
time.tv_usec = 0;
select(NULL, NULL, NULL, NULL, &t ...


试试下面的代码

#include <sys/select.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
  struct timeval mytime;
  mytime.tv_sec = 1;
  mytime.tv_usec = 0;
  select (0, NULL, NULL, NULL, &mytime);
  printf ("wait successfully\n");
  
}

论坛徽章:
0
7 [报告]
发表于 2007-05-09 15:06 |只看该作者
原帖由 ypxing 于 2007-5-9 15:00 发表


试试下面的代码

#include <sys/select.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
  struct timeval mytime;
  mytime.tv_sec = 1;
  mytime.tv_usec = 0;
  sel ...



谢谢你的关注

你的这个程序相当于是sleep(1);
我刚刚认真修改了一下我的回复

那我想实现 在某一时间区域内 比如说5秒内 让程序发送10个包 然后下5秒 再发送10个包 如此循环下去
我该如何实现呢? 如何控制程序实现这样的流程?

我开始试图使用
time_t curtime;
time_t lasttime;
time_t elapse;
lasttime = 0;
while(1)
{
      time(&curtime);
      if((curtime - lasttime) > elapse){            
             run();/*执行动作*/
       lasttime = curtime;
      }
}

我开始使用这样的模式尝试 不过我使用ctime打印出elapse的结果
是一个日期 我如果想让他每5秒就run()一次 我该如何设置我的elapse?


实现的并不是等待一秒 而是在每一秒的时间间隔里 都发送指定的数据包 实现每秒发送指定数据包的功能

论坛徽章:
0
8 [报告]
发表于 2007-05-09 15:09 |只看该作者
原帖由 karl412 于 2007-5-9 15:06 发表



谢谢你的关注

你的这个程序相当于是sleep(1);
我刚刚认真修改了一下我的回复

那我想实现 在某一时间区域内 比如说5秒内 让程序发送10个包 然后下5秒 再发送10个包 如此循环下去
我该如何实现呢? 如 ...


看看下面这个链接吧:
http://fanqiang.chinaunix.net/a4/b2/20010508/113412.html

利用下面两个函数应该可以帮助你
       #include <sys/time.h>

       int getitimer(int which, struct itimerval *value);
       int setitimer(int which, const struct itimerval *value,
                     struct itimerval *ovalue);

[ 本帖最后由 ypxing 于 2007-5-9 15:12 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2007-05-09 15:20 |只看该作者
再次谢谢你的关注

问题在于
#include <linux/time.h>
会报错
/usr/include/linux/time.h:9: redefinition of `struct timespec'
(见一楼)

如果
#include <sys/time.h>
也会报错timeval undeclared

郁闷ING

论坛徽章:
0
10 [报告]
发表于 2007-05-09 15:26 |只看该作者
原帖由 karl412 于 2007-5-9 15:20 发表
再次谢谢你的关注

问题在于
#include <linux/time.h>
会报错
/usr/include/linux/time.h:9: redefinition of `struct timespec'
(见一楼)

如果
#include <sys/time.h>
也会报错timeval  ...


我下面这段代码不会报错呀
#include <sys/time.h>
#include <stdlib.h>

int
main (int argc, char *argv[])
{
  struct timeval mytime;
  mytime.tv_sec = 2;
  mytime.tv_usec = 0;
  printf ("no error\n");
  
}

不知道你的怎么回事
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP