문제

변경을 기다리는 상태에서 스레드를 잡는 방법이 있습니까? 내 말은 TLL이 일어난 일 (var, 호출 방법 등)을 기다리는 것을 의미합니다.

이와 같은 정당의 일반적인 aproach

Statemachine 예

그것은 단일 스레드 (및 GUI) 응용 프로그램에서 작동 할 수있는 (True) 루프를 사용하지만 스레드와 함께 사용할 수는 없습니다. )

따라서 프로세서 소비 작업을 피하기 위해 간단하고 추악한 방법은 "정기적 인 체커"라는 것을 의미합니다. 다른 아이디어를 추가하면 동기화 된 객체를 정의하고 스레드 수면 대신 대기를 사용하는 것입니다.

예시:

do{
    Switch(state)
    {         
        case STATE_A:
            //..A things                         
            break;

        case STATE_B:
            //..B things                         
            break;

        ...

        case STATE_Z:
            //..Z things                         
            break;
    }
    // Here!  =>   wait()?  Thread.sleep(TIME_CONST)? //Hold and yield
}while(powerOn);

단점은 동기화 된 또는 Time_Const 내에서 발생하는 모든 일이 보이지 않게 사용하여 복잡성을 추가하는 것입니다.

이 일을하는 다른 아이디어를 알고 싶습니다. 감사합니다!

도움이 되었습니까?

해결책

예, 당신은 사용할 것입니다 wait/notify. 그것이 바로 그럴 것입니다.

또는 주 머신에 자체 스레드가 필요하지 않을 수도 있습니다. 다른 스레드는 An을 호출 할 수 있습니다 update 흥미로운 일이 발생할 때 상태 머신의 방법.

다른 팁

당신이 지정하는 경우 a 대기 UMPLE의 상태 머신은 이에 대한 코드가 생성됩니다. 대기열로 umple 상태 머신을 지정하면 특별히 이벤트를 기다리는 스레드 (메소드 호출)를 만듭니다. 클래스의 다른 코드는 원래 스레드에서 동시에 발생할 수 있습니다. 키워드 '대기업'은 상태 머신의 정의 직전에 배치해야합니다.

보다 http://statemachines.umple.org Umple에서 상태 기계 생성에 대한 자세한 내용. 이 맥락에서 umple을 Java (및 기타 언어)의 사전 처리기로 간주 할 수 있습니다.

잠금 장치를 사용할 수도 있습니다 상태 (Java 1.5+). 같네요 wait/notify 그리고 Javadoc에는 예가 있습니다

a를 사용해보십시오 파이프 이벤트 소스 스레드와 FSM 실시 림 스레드 사이. 이것은 2 스레드 구현에 충분합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top