일반적으로 이벤트 핸들러는 어떻게 작동합니까?


14

이것은 일반적인 주제입니다. 이벤트 핸들러는 어떻게 작동합니까?

이것은 무대 뒤에서-그것이 만들어 질 때 일어나는 일을 의미합니다.

나는 대략적인 생각을 가지고 있지만 그것을 확인하고 싶습니다.



훌륭하고 관찰자 패턴은 내가 찾은 것입니다.이 문제와 관련하여 웹을 읽었으며 이벤트 중심 프로그래밍 주제에 관한 좋은 논문을 읽었습니다. 이 백서에서는 핸들러 디자인 패턴의 프로세스에 대해 설명합니다. Dispatcher에 오는 이벤트가 많으면 이벤트를 가져 와서 분석하여 이벤트 유형을 판별 한 후 해당 이벤트를 처리 할 수있는 핸들러로 각 이벤트를 보냅니다.
JHarley1

1
디스패처에 프로그램이 닫힐 때만 (예를 들어 GUI 응용 프로그램으로) 중지되는 무한 루프 인 방법을 설명합니다. 그런 다음 GUI 프레임 워크를 사용하여 이벤트 중심 프로그래밍을 수행하는 데 널리 사용되는 옵저버 패턴 (또는 게시 / 구독 패턴)과 "우리에게 전화하지 마십시오"라는 할리우드 원칙에서 작동하는 방식 .
JHarley1

위의 설명이 적절하다고 말 하시겠습니까?
JHarley1

때에 따라 다르지. 높은 수준의 개요는 괜찮습니다. 그러나 포괄적이고 철저한 설명을 원하시면 예를 들어 웹 대 데스크탑 이벤트에 들어갈 수 있기 때문에 이러한 설명은 많은 작업 페이지 일 것입니다.
JB King

답변:


15

하위 수준에서 이벤트 처리기는 종종 장치폴링 하고 하드웨어 인터럽트를 대기하여 작동합니다. 기본적으로 하드웨어 스레드가 발생할 때까지 기다리는 동안 백그라운드 스레드가 차단됩니다. 인터럽트가 발생하면 폴링 기능은 차단을 중지합니다. 그런 다음 응용 프로그램은 인터럽트를 일으킨 장치 핸들과 그 인터럽트 유형을 확인한 다음 그에 따라 동작합니다 (예 : 이벤트 처리기 함수 호출). 이것은 일반적으로 별도의 스레드에서 수행되므로 비동기 적으로 발생합니다.

물론 이것이 실제로 구현되는 방식은 OS와 장치 / 입력 유형에 따라 상당히 다릅니다. UNIX 시스템에서 소켓, 직렬 또는 USB 포트와 같은 이벤트 처리기가 구현되는 한 가지 방법은 select 또는 poll 시스템 호출을 통하는 것 입니다. 하나 이상의 파일 / 장치 설명자 (네트워크 소켓, 직렬 / USB 포트 등의 장치와 관련됨)가 poll시스템 호출 로 전달됩니다.이 호출은 저수준 C API를 통해 프로그래머에게 제공됩니다. 이러한 장치 중 하나에서 이벤트가 발생하면 (예 : 일부 데이터가 직렬 포트에 도착하는 경우) 폴링 시스템 호출이 차단을 중지하고 응용 프로그램에서 이벤트를 발생시킨 장치 설명자 및 이벤트 유형을 확인할 수 있습니다. .

Windows에서 이것은 다르게 처리되지만 개념은 기본적으로 동일합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.