2011-12-29 6 views
1

나는 자동차 패브릭을 에뮬레이트하는 자바 프로그램을 가지고있다. 나는 설명을 썼지 만, 이해하기가 매우 어렵고 실제로 유용하지 않기 때문에 "추상적 인"질문을 할 것입니다.자바를 기다리는 중

나는 "지금"패브릭에 새 차를 만드는 방법을 알려주는 무한 루프를 가지고 있습니다.

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

직물 내부에는 3 개의 구역이 있습니다. 자동차의 몸체가 만들어지는 스테이지 0, 자동차에 조명이 제공되는 스테이지 1, 내가 완충기를 올려 놓고 완성 된 모든 자동차가 배치되는 장소 인 스테이지 2가 있습니다.

처음으로 menthod now이 호출되면 스테이지 0에 자동차 바디가 생성됩니다. 그런 다음 두 번째 호출 될 때 첫 번째 바디를 1 단계로 이동하고 자동차의 불빛 (두 개의 원을 그려서) 새로운 몸체를 만듭니다. 그것은 자동차가 준비 될 때까지 이런 식으로 진행됩니다. 완성 된 구역으로 이동합니다.

여기 내 문제입니다. 두 번째로 now 메서드를 호출하면 3 가지가 수행됩니다.

i. 그것은 1 단계에서 차체를 칠한다
ii. 0 단계에서 새로운 차체를 칠한다
iii. 그것은 1 단계에서 차체 위에 빛을 칠합니다.

사람들이 조명이 제공되는 차량을 볼 수 있도록 단계 (iii)를 지연하고 싶습니다. 대기 시간 (thread.sleep)을 사용하거나 x 밀리 초가 걸리면 전체 패브릭이 지연됩니다. 내가 필요로하는 것은 (iii) 정상 흐름에서 벗어나 별도로 수행하는 것인데, 조명을 그리기 전에 350 밀리 초를 기다렸을 때 나머지 제조 프로세스가 지연되지 않는다고 생각합니다. (그림의 나머지 부분).

아이디어가 있으십니까?

+0

이벤트). – Lalaland

+0

더 자세히 가서 더 추상적으로 만들 수 있습니까?나는 이해하려고 노력하고 있지만 그것은 어렵다. –

답변

3

질문에 대한 가정은 다음과 같습니다. 500ms의 일정한 간격으로 now() 메소드를 호출하려고합니다. 이제 당신은 now() 안의 하위 작업 3을 지연시키고 싶습니다. 이것은 또한이) 호출 난 당신이 (단순히 TimerTask을 만들고 지금 포장

java.util.Timer.scheduleAtFixedRate을 사용하는 것이 좋습니다 다음의 요구 사항 인 경우 하위 3의 지연이 모든 500ms로

에서 지금()가 호출을 지연해서는 안 의미 그 안에.

사용 대기 (500) 또는 얼마나 이제까지 당신이이 다소 복잡하지만 잘 확장한다 하위 3

0

에서 원하는.

  1. 는 각 이벤트는
  2. 당신은 (더 많은 이벤트를 만들어 확장 할 수 큐에 다음 이벤트를 추가 한 다음 적절한 함수 호출을 수행하고 있으 이벤트 큐를 구현 즉, 시작 또는 철거 사용자가 단계 II 및 III 사이 fabric.now() 내부 지연하고 보상하는 메인 지연 시간을 줄일 수

    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 
        } 
    } 
    
관련 문제