inflearn logo
강의

講義

知識共有

MFC Windowsプログラミング - 基本

Win32 APIのサンプル分析(フルクラスの例を含む)

이벤트 메시지 루프의 '응답 없음'에 대하여

解決済みの質問

136

upzerg

投稿した質問数 2

0

안녕하세요 선생님.

강의를 듣다가 질문이 생겨서 이렇게 글을 작성하게 되었습니다.

 

GUI 응용 프로그램에서 사용자 입력에 대한 처리가 먹통이 되는 경우를 '응답 없음' 상태라고 한다고 하셨습니다. 실제로 프로그램들을 사용하며 간혹 겪어보기도 하였고요... ㅎㅎ

그런데 윈도우즈는 어떻게 해서 이 '응답 없음' 상태를 감지하여 먹통이 된 프로그램 창 위에 응답 없음 다이얼로그를 띄워주는 것인지 궁금해졌습니다.

주기적으로 실행중인 응용 프로그램들을 감시하는 일을 하는 백그라운드에서 운영체제 서비스라도 있는 것인가요?

c++ mfc gdi sdi vc++ win32api

回答 2

1

nullnull8537

각 응용 프로그램들이 가지고 있는 메시지큐에 들어가는 모든 메시지는 윈도우 시스템 수준 시스템 큐에서 분배된 것입니다. 큐에 자료가 쌓이기만하고 처리되지 않는 것을 알 수 있으며 무엇보다 윈도우 시스템에서 보내주는 메시지들도 응용 프로그램 메시지 큐에 쌓이는데 그에 대한 응답이 없는 것으로 메시지 처리 이벤트 루프가 작동하지 않음을 알 수 있습니다. 참고하시기 바랍니다. 😄

1

upzerg

아하 말씀하신 구조대로 생각해보니 이해가 가네용
답변 감사합니다!

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 카트라이더드리프트님.

환경 설정 및 메시지 루프에 대한 질문 감사드립니다. 프로그램의 “응답 없음” 상태는 Windows 운영체제가 어떻게 감지하는지 궁금해 하셨군요. 이 현상은 실제로 사용자들이 프로그램을 사용할 때 종종 경험하는 부분입니다.

Windows 운영체제는 “응답 없음” 상태를 감지하기 위해 프로그램이 메시지 큐를 얼마나 자주 처리하는지를 관찰합니다. GUI 응용 프로그램에서는 메인 스레드가 주기적으로 메시지 큐의 메시지를 처리해야 하는데, 만약 프로그램이 일정 시간 이상 메시지 큐를 처리하지 않고 대기 상태에 빠져 있다면, Windows는 해당 프로그램이 “응답 없음” 상태에 빠졌다고 판단합니다.

이 감지는 Windows 운영체제의 윈도우 관리자(Window Manager)가 담당하며, 주기적으로 각 응용 프로그램의 스레드가 메시지 루프를 얼마나 자주 실행하는지를 확인하여 응답성을 파악합니다. 일반적으로 응용 프로그램이 너무 긴 시간 동안 스레드를 차단하거나 작업 중일 때 이러한 문제가 발생할 수 있습니다.

“응답 없음” 경고 대화상자는 윈도우 운영체제가 관리 화면 업데이트 루프(메시지 루프)를 모니터링해서 사용자가 프로그램의 반응성을 잃었다고 감지할 때 뜹니다. 이것은 주로 메인 스레드가 바쁘거나 막혀 있을 때 발생합니다. 스레드를 분리하여 길고 복잡한 작업을 백그라운드 스레드에서 처리하거나, 비동기 프로그래밍을 통해 메인 스레드의 부하를 줄이는 것이 이러한 문제를 예방하는 방법이 될 수 있습니다.

아래는 나름의 사례와 자료입니다:

이 내용이 도움이 되셨기를 바랍니다. 추가적으로 궁금한 점이 있으시면 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

upzerg

'윈도우 관리자(Window Manager)'는 컴퓨터에서 실행중인 프로세스들의 메세지 큐를 감시하는 별도의 외부 프로세스로서 작동하는 것인가요?
이를테면 dwm.exe, csrss.exe (잘은 모르지만 운영체제에서 중요한 프로세스라는 정도로만 알고 있습니다...ㅎㅎ) 같은 녀석들처럼 윈도우에서 어떤 특수한 역할을 위해 운영체제에 포함되어 제공되는 프로세스같은 녀석이 이를 담당하는 것인지... 궁금하네요

Reticle이 안나옵니다.

0

6

1

진행 방법 질문드립니다!

0

26

2

Singleton 관련 질문입니다.

1

27

2

2-I) 왜 이 문제가 그래프이론 카테고리에 있는지 잘 모르겠습니다.

0

54

2

AddGameFrameworkComponentReceiver vs AddExtensionHandler

0

23

0

scanf("%d\n") 의미

0

20

1

2주차 개념#12 트리 순회

0

25

2

책과 강의 질문

0

156

2

MFC로 게임 엔진 제작 질문

0

175

2

그려진 도형 선택(Z-order 변경)부분[9분59초경]

0

92

2

메모리 창을 어떡해 뛰우나요?

0

164

3

안녕하세요 선생님

0

114

1

토글메뉴(강사도 삽질) 10:30 질문 / pch.h 전역변수 선언 에러

0

171

2

CMainFrame과 CCreateDemoView와의 관계 (교과서 p80 그림3-3)

1

109

1

메시지 루프에서 메시지 처리 성능 비교: WinAPI vs MFC

0

273

3

커스텀 드로우에 대해서도 다루나요?

0

187

2

MainFrame 에서 LButtonDown 이벤트 처리 질문

0

166

1

윈도우 프로그래밍 UI 관련 질문입니다

0

230

2

유튜브 강의와 차이점

0

316

1

책 질문입니다.

0

283

2

mfc 내부에서 콜백 함수 구현 방법

0

391

1

수강기간 무제한인지 문의드립니다!

1

453

1

pOldPen = dc.SelectObject(); 관련 질문

0

267

1

라디오 버튼 그룹에 대해서 질문합니다.

0

302

1