while(true)
{  get(num);//num的值是即时从外部获得的.
  if(oldtime+2分钟==datetime.now)
  totlal=total+num;
sleep(5000)
}
这样会产生问题,因为间隔是2分钟,这样会丢好多数据,最后的总值total也不对.

解决方案 »

  1.   

    while(true) 
    {   get(num);//num的值是即时从外部获得的. 
      if(oldtime+2分钟==datetime.now) 
      totlal=total+num; 
    sleep(5000) 

    这样会产生问题,因为间隔是5分钟,这样会丢好多数据,最后的总值total也不对. 有时候会得不到oldtime+2分钟=datetime.now,给跨过去了.
      

  2.   

    顶一下。sleep(5000);
    貌似是5秒钟的间隔。
      

  3.   

    //oldtime+2分钟==datetime.nowif (((TimeSpan)(DateTime.Now.Subtract(oldtime))).TotalMinutes == 2)
    {
         //真
    }
      

  4.   

    不明白,num的值是即时从外部获得的,那么没有Invoke之类的东西???还是个同步的东西???
    但不管怎样,用Timer是不行的,Timer必须会使数据丢失。这里应该用Tread
      

  5.   

    如果没猜错 你说的是5秒 
    如如果什么都不(ˇˍˇ) 想~落下 
    就不要if(oldtime+2分钟==datetime.now)   sleep(5000)
      

  6.   

    lz,你到底想达到什么效果,时间间隔为何是两分钟?
    DataTime判断不是很精确的,你应当判断一个范围,即小于多少时差就视为间隔两分钟,
    这个跟浮点数比较大小是一样的,用==肯定不行
      

  7.   

    楼主的意思是间隔2分钟执行一次 total+=num 是吗?thread.sleep(20000)
    total += num如果用oldtime+2m==datetime.now sleep(5000)可行的几率很小
    因为你的代码是每5s执行一次,如何算准在5s的某个倍数oldtime+2m==datetime.now??
      

  8.   

    用timer控件,timer1.Interval = 1000;
    声明全局变量 int dt;
    timer里的Click事件里写:
    dt++;
    根据需要判断dt的值来执行方法
      

  9.   

    Sleep是无法达到精确的时间间隔的,Timer可能会好点。
      

  10.   

    2、3、4分钟后执行不同事件int i = 0;while(i<5)
    if(i==2) method1();
    else if(i==3) method2();
    else if(i==4) method3();
    sleep(1000);
    i++;
    }
      

  11.   

    用timer:int index=0;
    timer的调用事件(){
      index++;
      if(index==2){
        method1();
      }else if(index==3){
        method2();
      }else if(index==5){
        method3();
      }
    }
      

  12.   

    你可以每过1秒收集一次数据,把它暂时存放在temp变量里,等到2min循环到的时候,再把temp里的值跟据需要做处理(累加到total上)
      

  13.   


    int total=0;
     private void Count()
            {
                get(num);//num的值是即时从外部获得的. 
                total = total + num; 
            }
    private void mainvoid()
    {
     while(true) 
                {               
                    ThreadStart ts = new ThreadStart(Count);
                    Thread t = new Thread(ts);
                    t.Start();
                    Thread.Sleep(120000) ;//比较精确的2分钟执行一次,get(num)的执行时间不超过2分钟就行了
                } 
    }
      

  14.   

    有这样的需求很恐怖!
    两种方案:1、运用线程Thread,后台执行。[持久]
              2、运用js,前提是此页面不要刷新了!
      

  15.   

    设置短暂存储器  暂时保存  Timer类 不建议使用