2010-02-01 6 views
0

나는 Mac OS X, XCode를 사용하고 있다고 언급해야한다.누구나 C++에서 이벤트 처리를 설명 할 수 있습니까?

버퍼에 파일 쓰기가 끝나면 GUI가 파일에서 데이터를 읽도록 지시하는 이벤트를 생성합니다.

이 경우 어떤 종류의 이벤트가 필요한지 잘 모르겠습니다. 이벤트를 사용하지 않고 할 수 있습니까?

감사합니다.

+1

어떤 종류의 "이벤트"입니까? –

+1

"이벤트"는 C++의 첫 번째 클래스 구조는 아니지만 일반적으로 콜백 함수로 구현됩니다. 이것은 진짜 질문이 아닙니다. –

+4

구체적으로 작성하십시오. C++에는 "이벤트"개념이 없습니다. 윈도우 환경을 의미합니까? –

답변

1

C++의 이벤트 처리는 주로 예외 및 신호로 구성됩니다. 이러한 처리 방법에 대한 정확한 세부 정보는 사양 또는 Stroustrup의 서적에 가장 잘 설명되어 있습니다.

마우스 클릭, 인터럽트 및 세마포어와 같은 다른 이벤트 처리는 OS에서 처리합니다. 서로 다른 OS에는 서로 다른 API가 있으며 이벤트 처리 요구 사항을 설정합니다. 많은 멀티 스레드 및 멀티 태스킹 OS는 이벤트가 발생할 때까지 (예 : 세마포어 설정, 신호 생성 또는 메시지 전송과 같은) 프로그램을 대기 상태로 만들 수 있습니다.

파일에 대한 쓰기 작업이 끝나면 프로그램이나 스레드가 있어야합니다. 신호은 OS 또는 GUI 프레임 워크에 의해 정의됩니다.

참고로 대부분의 설계에서 버퍼는 파일에 쓰지 않습니다. 프로그램, 작업 또는 실행 스레드는 버퍼를 파일에 기록합니다. 파일에 버퍼 쓰기를하면 스레드가 파일에 버퍼를 쓰는 것보다 더 많은 신호 또는 컨텍스트 전환이 생성 될 수 있습니다.

-1

이벤트없이 가능하지만 폴링해야합니다. 체크 아웃 boost :: asio. 그것은 네트워킹을위한 것이지만, 파일에 쓸 수 있고 그것이 끝나면 함수를 호출 할 수 있다고 들었습니다. (물론 비동기식). 또한 쓰레드와 함께 사용할 수있는 boost :: signals2가 있습니다. 쓰레드가 완료되면 "write is finished function"을 호출하는 신호를 사용합니다. boost :: bind를 사용하여 신호를 사용하여 파일 이름이나 핸들을 전달하여 중요한 정보를 표시 할 수도 있습니다.

+2

이것은 일관성이없고 질문과 막연하게 관련이 있습니다. –

관련 문제