하나의 루프에 두 개의 이벤트 구조를 사용하는 것을 피하기
- 업데이트 날짜:2025-08-27
- 2분 (읽기 시간)
National Instruments는 루프에 단지 하나의 이벤트 구조만을 사용하도록 권장합니다. 이벤트가 이 설정에서 발생할 때, 이벤트 구조는 이벤트를 다루고, 루프는 반복되고, 다음 이벤트가 일어날 때까지 이벤트 구조는 기다립니다. 단일 루프에 2개의 이벤트 구조를 놓으면 이 2개의 이벤트 구조가 하나의 이벤트를 다룰 때까지 루프는 반복할 수 없습니다. 이벤트 구조를 위해 고정되어 있는 프런트패널을 활성화하면, 사용자가 프런트패널과 어떻게 상호작용할 것인가에 의해 VI의 사용자 인터페이스는 응답하지 않을 수 있습니다.
예를 들면, 2개의 이벤트 구조를 단일 While 루프에 놓고 처음 이벤트 구조를 설정하여 마우스 다운 이벤트를 다루고 두번째 이벤트 구조를 설정하여 키 다운 이벤트를 다루면, 처음 이벤트 구조는 사용자가 마우스 버튼을 클릭할 때 마우스 다운 이벤트를 받습니다. 처음 이벤트 구조는 올바른 이벤트 케이스를 실행하고 실행을 끝냅니다. 그동안, 두번째 이벤트 구조는 키 눌림이 일어나기를 기다립니다. 사용자가 키를 누를 때, 두번째 이벤트 구조는 키 다운 이벤트를 받습니다. 두번째 이벤트 구조가 이벤트를 다룰 때, While 루프는 반복됩니다. 사용자가 마우스 다운 이벤트, 키 다운 이벤트, 마우스 다운 이벤트, 키 다운 이벤트, 등을 생성하는 상호 교대를 계속하면, 이벤트 구조가 발생함에 따라 그 이벤트를 다루고 While 루프가 계속 반복되기 때문에 VI가 자연스럽게 실행됩니다.
그러나, 2개의 마우스 다운 이벤트로 하여금 키 다운 이벤트 사이에 개입하지 않고 순차적으로 발생하도록 하여 사용자가 마우스 버튼을 2번 클릭하면, 사용자 인터페이스가 멈춥니다. 사용자가 처음으로 마우스 버튼을 클릭하면, 이벤트 구조는 먼저 마우스 다운 이벤트를 받고, 이벤트를 다루고 실행을 끝냅니다. 그러나, 두번째 이벤트 구조는 키 다운 이벤트를 계속해서 기다리고 While 루프가 다시 반복하지 않도록 막습니다. 사용자가 마우스 버튼을 두번 클릭하면, LabVIEW는 두번째 마우스 다운 이벤트를 생성하고 처음 이벤트 구조가 이벤트를 다룰 때까지 프런트패널을 잠금니다. 이 포인트에서 VI는 교착 상태가 됩니다. 처음 이벤트 구조가 While 루프가 반복할 때까지 실행될 수 없고, 두번째 이벤트 구조가 키 다운 이벤트를 받고 다룰 때까지 While 루프는 반복할 수 없습니다. 프런트패널이 잠겨 있기 때문에, 키 다운 이벤트는 발생할 수 없습니다. 사용자가 VI를 강제 종료할 때까지 프런트패널이 잠겨 있고 응답하지 않습니다.
프런트패널이 잠기고 사용자 인터페이스가 멈추는 것을 피하기 위해, 단일 이벤트 구조에서 VI가 다루려고 하는 모든 이벤트를 설정하거나 While 루프안에 단지 하나의 이벤트 구조가 있다는 것을 확인합니다. 덧붙여서, 이벤트가 일어날 때 이벤트를 다루도록 이용할 수 있는 이벤트 구조가 항상 있다는 것을 확인합니다.