2011-12-29 69 views
1

我有一个模拟汽车结构的java程序。我写了一个解释,但它很难理解,也不是很有用,所以我只会问“抽象”问题。在Java中等待

我有一个无限循环,调用方法“现在”,告诉织物建立一辆新车。

while(true){ 
     try{ 
      Thread.sleep(500); 
     }catch (Exception e) {;} 
     fabric.now(); 
    } 

织物内部有3个区域;第0阶段是汽车车身的制造阶段,第1阶段是汽车配备照明灯的阶段,第2阶段是我在其上放置保险杠并完成,这是所有成品汽车的放置位置。

当第一次调用now时,它会在阶段0中创建车体。然后,当它第二次被调用时,它将第一个主体移动到阶段1,它将把汽车的灯(通过画两圈),它创造了一个新的身体。它一直持续到汽车准备就绪,这是当它被移动到完成的区域。

这是我的问题。第二次我打电话给现在的方法,它做了3件事:

i。它绘制了一个阶段的车身。它在0阶段绘制新的车身。
iii。它在1个舞台上绘制车身上的灯光。

我想推迟步骤(iii),让人们可以看到提供灯光的汽车。如果我使用等待,thread.sleep,或者做一个需要x毫秒的周期,它会从那时起延迟整个结构。 我认为我需要的是从正常流程中取出(iii)步骤并单独执行,因此,在绘制灯光之前等待350毫秒时,不会延迟制造过程的其余部分。 (绘画的其余部分)。

任何想法?

+0

可以步骤II和III之间的fabric.now()的内部延迟,然后减小主延迟进行补偿。 – Lalaland 2011-12-29 05:38:24

+0

你可以走得更远,让它更抽象吗?我试图理解,但很难。 – 2011-12-29 05:39:32

回答

3

这里是我对你的问题的假设: 你想以500ms的间隔定期调用now()方法。现在不管你想要延迟now()中的子任务3。这也意味着在子任务3的延迟不应该在每500ms

延迟调用NOW()如果这是你的要求,那么我给你使用java.util.Timer.scheduleAtFixedRate

只需创建一个TimerTask,现在换你(建议)调用在里面。

使用等待(500),有多少曾经要在子任务3

0

这是稍微复杂一些,但应该很好地扩展。

  1. 实现事件队列
  2. 让每个事件进行适当的函数调用,然后再添加下一个事件队列
  3. 您可以通过更多的活动(延长即启动或拆除事件)

    interface QueueEvent{ 
        void perform(EventQueue q); 
    } 
    
    class Stage0CarEvent implements QueueEvent{ 
        public void perform(EventQueue q){ 
        fabric.drawStage0Car(); 
        q.push(new Stage1CarEvent(),500); 
        } 
    } 
    
    class Stage1CarEvent implements QueueEvent{ 
        public void perform(EventQueue q){ 
        fabric.drawStage1Car(); 
        q.push(new AddLightsEvent(),350); 
        q.push(new Stage2CarEvent(),500); 
        } 
    } 
    
    // other events... 
    
    class EventQueue{ 
        void run(){ 
        while(true){ 
         // get the next event 
         // wait an amount of time needed for the next event 
         event.perform(this); 
        } 
        } 
    
        void push(QueueEvent event,int t){ 
        //insert the next event t time units from now 
        } 
    }