이벤트 루프
컴퓨터 과학에서 이벤트 루프(event loop), 메시지 디스패처(message dispatcher), 메시지 루프(message loop), 메시지 펌프(message pump), 런 루프(run loop)는 프로그램의 이벤트나 메시지를 대기하다가 디스패치(효율적으로 처리)하는 프로그래밍 구조체이다. 일반적으로 이벤트가 도착할 때까지 요청을 차단하는 일부 내부 또는 외부의 "이벤트 제공자"에게 요청을 한 다음 관련 이벤트 핸들러를 호출한다.(이 때 이벤트를 디스패치한다) 이벤트 제공자가 선택 또는 폴링되는(유닉스 시스템 호출에서 실제로 폴링되지는 않음) 파일 인터페이스를 따르는 경우 이벤트 루프는 반응자와 결합해서 사용할 수 있다. 이벤트 루프는 거의 무조건 메시지 제공자와 비동기식으로 동작한다.
이벤트 루프가 중심 제어 흐름 구조의 프로그램을 형성할 때 이를 메인 루프(main loop) 또는 메인 이벤트 루프(main event loop)라고 할 수 있다. 이벤트 루프가 프로그램 내의 최상위 통제를 받기 때문에 이러한 표현은 적절하다.
사용법
[편집]그래픽 사용자 인터페이스가 만연해 있기 때문에 현대의 대부분의 응용 프로그램들은 메인 루프 기능을 갖추고 있다. get_next_message()
루틴은 일반적으로 운영 체제에 의해 제공되며 메시지를 사용할 수 있을 때까지 차단한다. 그러므로 루프는 처리할 대상이 있을 때에만 진입된다.
function main initialize() while message != quit message := get_next_message() process_message(message) end while end function
파일 인터페이스
[편집]유닉스에서 모든 것이 파일이다 패러다임은 자연적으로 파일 기반 이벤트 루프가 만들어진 계기가 된다. 파일의 읽기/쓰기, 프로세스 간 통신, 네트워크 통신, 장치 제어는 모두 파일 입출력을 통해 수행되며 대상은 파일 서술자에 의해 식별된다. select와 poll 시스템 호출은 파일 서술자 집합이 상태 변화를 감지할 수 있게 한다.(예: 데이터가 읽을 수 있게 될 때)
이를테면 지속적으로 업데이트되는 파일을 읽고 소켓(유닉스 도메인 또는 버클리) 상의 클라이언트와 통신하는 X 윈도 시스템에 내용을 표시하는 프로그램을 고려할 수 있다.
main():
file_fd = open ("logfile")
x_fd = open_display ()
construct_interface ()
while changed_fds = select ({file_fd, x_fd}):
if file_fd in changed_fds:
data = read_from (file_fd)
append_to_display (data)
send_repaint_message ()
if x_fd in changed_fds:
process_x_messages ()
같이 보기
[편집]외부 링크
[편집]- Meandering Through the Maze of MFC Message and Command Routing
- Using Messages and Message Queues (MSDN)
- Using Window Procedures (MSDN)
- WindowProc (MSDN)
이 글은 컴퓨터 과학에 관한 토막글입니다. 여러분의 지식으로 알차게 문서를 완성해 갑시다. |