해결된 질문
작성
·
86
0
안녕하세요 선생님.
강의를 듣다가 질문이 생겨서 이렇게 글을 작성하게 되었습니다.
GUI 응용 프로그램에서 사용자 입력에 대한 처리가 먹통이 되는 경우를 '응답 없음' 상태라고 한다고 하셨습니다. 실제로 프로그램들을 사용하며 간혹 겪어보기도 하였고요... ㅎㅎ
그런데 윈도우즈는 어떻게 해서 이 '응답 없음' 상태를 감지하여 먹통이 된 프로그램 창 위에 응답 없음 다이얼로그를 띄워주는 것인지 궁금해졌습니다.
주기적으로 실행중인 응용 프로그램들을 감시하는 일을 하는 백그라운드에서 운영체제 서비스라도 있는 것인가요?
답변 2
1
각 응용 프로그램들이 가지고 있는 메시지큐에 들어가는 모든 메시지는 윈도우 시스템 수준 시스템 큐에서 분배된 것입니다. 큐에 자료가 쌓이기만하고 처리되지 않는 것을 알 수 있으며 무엇보다 윈도우 시스템에서 보내주는 메시지들도 응용 프로그램 메시지 큐에 쌓이는데 그에 대한 응답이 없는 것으로 메시지 처리 이벤트 루프가 작동하지 않음을 알 수 있습니다. 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다. 카트라이더드리프트님.
환경 설정 및 메시지 루프에 대한 질문 감사드립니다. 프로그램의 “응답 없음” 상태는 Windows 운영체제가 어떻게 감지하는지 궁금해 하셨군요. 이 현상은 실제로 사용자들이 프로그램을 사용할 때 종종 경험하는 부분입니다.
Windows 운영체제는 “응답 없음” 상태를 감지하기 위해 프로그램이 메시지 큐를 얼마나 자주 처리하는지를 관찰합니다. GUI 응용 프로그램에서는 메인 스레드가 주기적으로 메시지 큐의 메시지를 처리해야 하는데, 만약 프로그램이 일정 시간 이상 메시지 큐를 처리하지 않고 대기 상태에 빠져 있다면, Windows는 해당 프로그램이 “응답 없음” 상태에 빠졌다고 판단합니다.
이 감지는 Windows 운영체제의 윈도우 관리자(Window Manager)가 담당하며, 주기적으로 각 응용 프로그램의 스레드가 메시지 루프를 얼마나 자주 실행하는지를 확인하여 응답성을 파악합니다. 일반적으로 응용 프로그램이 너무 긴 시간 동안 스레드를 차단하거나 작업 중일 때 이러한 문제가 발생할 수 있습니다.
“응답 없음” 경고 대화상자는 윈도우 운영체제가 관리 화면 업데이트 루프(메시지 루프)를 모니터링해서 사용자가 프로그램의 반응성을 잃었다고 감지할 때 뜹니다. 이것은 주로 메인 스레드가 바쁘거나 막혀 있을 때 발생합니다. 스레드를 분리하여 길고 복잡한 작업을 백그라운드 스레드에서 처리하거나, 비동기 프로그래밍을 통해 메인 스레드의 부하를 줄이는 것이 이러한 문제를 예방하는 방법이 될 수 있습니다.
아래는 나름의 사례와 자료입니다:
이 내용이 도움이 되셨기를 바랍니다. 추가적으로 궁금한 점이 있으시면 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
'윈도우 관리자(Window Manager)'는 컴퓨터에서 실행중인 프로세스들의 메세지 큐를 감시하는 별도의 외부 프로세스로서 작동하는 것인가요?
이를테면 dwm.exe, csrss.exe (잘은 모르지만 운영체제에서 중요한 프로세스라는 정도로만 알고 있습니다...ㅎㅎ) 같은 녀석들처럼 윈도우에서 어떤 특수한 역할을 위해 운영체제에 포함되어 제공되는 프로세스같은 녀석이 이를 담당하는 것인지... 궁금하네요
아하 말씀하신 구조대로 생각해보니 이해가 가네용
답변 감사합니다!