2011-11-04 7 views
0

모터의 현재 x, y, z 위치가 모터에 보낸 위치와 같을 때까지 기다리는 코드가 있습니다. 모터에 직접 묻는 명령이 없으므로 current.x, current.y 및 current.z가 my move (x, y, z) 숫자와 같을 때 true로 설정되도록 부울을 설정합니다.C# 부울을 기다리는 중

나는 여러 가지 아이디어를 시도했다. 첫째, 타이머를 설정하고 타이머의 각 틱마다 값이 같은지 확인한다. 그러나이 시도를 통해 코드가 같지 않으면 기다릴 코드를 얻을 수 없습니다.

또한 부울이 false 인 경우 몇 밀리 초를 기다렸다가 다시 확인하는 재귀 메소드를 시도했습니다. 코드에서 무한 재귀가 발생하여 스택 오버 플로우가 반환됩니다.

다음 명령을 보내기 전에 모터가 움직이지 않을 때까지 기다리는 방법은 무엇입니까?

당신은 아마도 모든 값은 당신이 원하는 당신이 값에 동일한 경우 트리거 이벤트의 일종을 가지고 시도 할 수

+1

코드가있는 경우 – musefan

+0

부울을 설정자와 속성으로 변경할 수 있습니까? 그러면 설정자가 이벤트를 트리거 할 수 있습니다. –

답변

2

이벤트를 생성하고 대기 코드를 이벤트에 등록 할 수 있습니다. 모터 코드로 돌아 가면 값이 일치하자마자 이벤트를 발생시킬 수 있습니다.

+0

이 이벤트를 만들려면 어떻게해야합니까? 모터의 위치를 ​​가져 오는 명령은 motor.currentx, motor.currenty, motor.currentz입니다. – kenetik

+0

두 클래스가 있다고 가정 해 보겠습니다. 모터 및 명령. Motors 클래스에서 이벤트를 정의합니다.이 이벤트는 좌표가 일치하면 "Motors"클래스가 실행하는 이벤트입니다. 이 이벤트에는 이벤트가 발생하면 호출되는 Command 클래스 메소드를 등록 할 수 있습니다. 맞춤 이벤트 기반 프로그래밍을 한 번도 해 본 적이 없다면 기사/블로그를 읽으라고 제안 할 것입니다. 다음은 시작할 수있는 좋은 장소입니다. http://www.akadia.com/services/dotnet_delegates_and_events.html –

1

(I 모터에서 액세스 할 수있는 데이터 만 그것의 현재 위치입니다) 액터 클래스는 이벤트를 구독합니다.

+0

나는 이것을 시험해보고 싶다. 그러나 C#으로 이벤트를 작성하는 방법을 모르겠다. 비쥬얼 스튜디오는 버튼을 두 번 클릭하고 이벤트를 만들기가 쉽다. 나는 자신 만의 커스텀 이벤트를 만드는 방법을 모른다. . – kenetik

+0

이 링크는 꽤 잘 결합되어 있습니다. - http://www.akadia.com/services/dotnet_delegates_and_events.html –

1

반복으로 변환하면 (while 루프) 스택 오버플로가 발생하지 않습니다.

+0

이전에이 코드를 건너 뛰었습니다. 코드를 건너 뛸 때 거의 무너졌습니다. 이벤트하지만,하지만 당신의 제안에 대해 감사합니다. – kenetik

1

다른 스레드가 특정 조건에 도달 할 때까지 기다리는 스레드 2 개 사이에 통신이있는 경우 가장 쉬운 메커니즘은 WaitHandle의 정렬을 사용하는 것입니다. 이 경우 AutoResetEvent을 권하고 싶습니다.

// Shared 
AutoResetEvent m_moveHit = new AutoResetEvent(false); 

// Thread 1 
void MoveHit(Position position) { 
    if (position == thePositionDesired) { 
    m_moveHit.Set(); 
    } 
} 

// Thread 2 
void Go() { 
    // Wait until the move happens 
    m_moveHit.WaitOne(); 

    // Won't get here until it happens 
} 
관련 문제