免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: karl412
打印 上一主题 下一主题

求助 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:42 |显示全部楼层
是这样的 我在每一秒钟 让一个进程发30个包 但是发完这30个包 并不需要1秒钟 所以剩下的时间 我希望他等待 等到下一秒开始 ---- 也就是实现 每一秒发送30个包

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

论坛徽章:
0
3 [报告]
发表于 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
4 [报告]
发表于 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
5 [报告]
发表于 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
6 [报告]
发表于 2007-05-09 15:47 |显示全部楼层
原帖由 converse 于 2007-5-9 15:31 发表
我想
>>struct timeval time;

变量time重名了



谢谢converse和ypxing  问题已经解决了!!

if(timeuse < 2.0){
                                
            }else{
                printf("Begin a new loop! \n");
                break;
            }

我开始加了一句打印 忘记加括号了 -_-!  低级错误
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP