2010-03-18 1 views
3

Vista 이상에서는 앱이 응답하지 않으면 바탕 화면 창 관리자가 필요에 따라 다시 그리기 (그 위에 창 이동, 끌기 등) 할 수 있습니다. 픽셀 버퍼. 또한 Windows는 일부 제한 시간이 지나면 앱이 응답하지 않을 때를 감지하여 상황을 극대화하려고합니다. 창을 어둡게 만들고 제목 표시 줄에 "응답 없음"을 추가하고 기타 다른 효과를 추가 할 것이라고 생각합니다.DWM 및 응답없는 앱 회화

이제 우리는 창 영역과 계층화 된 창을 사용하는 스킨 된 응용 프로그램을 가지고 있으며 이러한 효과를 제대로 수행하지 못합니다. 우리는 XP에서 개발해 왔지만 Vista에서 테스트 할 때 이상한 효과를 느꼈습니다. 일부 지점에서 응용 프로그램은 일부 계산이나 콜백 및 "5 초 내에 메시지를 검색하지 못하면 DWM이 창을 멈춘다 고 선언합니다"(MSDN - Preventing Hangs in Windows Applications)에 약간의 시간을 할애 할 수 있습니다. 이 문제가 발생하면 이상한 그래픽 문제가 발생합니다. 즉, 창 영역으로 인해 100 % 투명하게되는 모든 픽셀이 검은 색으로 바뀌므로 검정색 배경으로 창이 사각형을 효과적으로 다시 만듭니다. 원래 창의 픽셀이 일부 자식 대화 상자에서 조금씩 이동 한 다른 예외가있는 것 같습니다.

나는 그런 지연을 줄이기 위해 노력하고있다. (이상적으로 Windows는 이와 같이 할 필요가 없다.) 바쁜 동안에 응답 성을 유지하려고 노력하지만, 왜 그런 렌더링을 야기하는지 파악하고 싶다. , 나는 내가 모든 지연을 제거 할 수 있다고 보장 할 수 없기 때문에.

기본적으로, 필자는 Windows가 이런 일을 할 때 무엇을하는지 알고 싶습니다. 어떻게하면 내 앱이 제대로 동작하게 할 수 있을까요? 스킨이 적용된 앱은 Vista 이상에서 작동해야하므로 비표준 인 작업을 파악해야합니다. Windows가 응답하지 않는 응용 프로그램을 처리하는 방식에 대한 정보를 찾는 방법을 정확하게 알지 못합니다. 검색 결과가 응답하지 않는 응용 프로그램과 관련된 문제 만 반환하거나 DWM이 그러한 응용 프로그램으로 수행하는 작업에 대한 매우 기초적인 설명이 반환되기 때문입니다. 나는 100 % DWM이 책임이 있다고 확신하지는 못했지만 가능성이 높습니다. 잠재적 인 리드?

사진 문제;

Unresponsive app http://i42.tinypic.com/15ee8wo.jpg

+1

이 [MSDN 페이지] (http://msdn.microsoft.com/en-us/library/dd744765(VS.85) .aspx)는 제한 시간이 5 초라고 말합니다. – RyanCu

답변

0

나는이 일을 할 때 '고스트 (ghosting)'라고 불리는 것을 발견했으며, XP에서 도입되었다. (DWM은 모든 응용 프로그램의 픽셀을 추적하므로 더 나아간다고 생각한다. DisableProcessWindowsGhosting()을 사용하여 앱의 사용 기간 동안 사용 중지 할 수 있습니다. 일부 사람들은 권장하지는 않지만 계층화 된 창을 얼마나 잘못 처리했는지 생각하면 무시할 수있는 단점이 있습니다. 나는 그것을 테스트했고 정확하게 그것이 주장하는 것을 수행한다. 이제 서버가 반환하는 데 예상보다 오래 걸리면 전체 인터페이스를 조작하지 않습니다.

Vista/7의 대칭 처리 기능을 사용하여 계층화 된 창을 완전하게 비활성화하지 않고도 더 효과적으로 사용할 수있는 방법이 있다면 분명히 관심이 있지만 분명히 대답으로 받아 들일 것입니다. 당신이 해왔 던 것처럼, 처음에 정지하지 않으려 고,

우선 : 가능한 UI 스레드에서 적게 무거운을 나는 생각

+0

값 비싼 계산을하거나 UI 스레드에서 I/O를 차단하는 것은 어쨌든 ... – Hades32

+0

물론입니다. 하지만 이미 UI 스레드에서 물건을 옮기려고했지만 어쨌든 다른 문제의 맨 아래로 가고 싶다고 언급했습니다. –

+0

흠, 예, 대충하는 것은 분명히 윈도우 내용이 다른 스레드의 윈도우 부분에 매달려있는 앱과 매달린 앱 사이에 그려져 있지 않을 때 더욱 매끄럽게 보입니다. DWM은 렌더링을 최상위 창 특정 프레임 버퍼로 리디렉션합니다. (사용자가 이미 "지루함을 결정했기 때문에 Windows가 잘못되었다는 것을 알기도 전에 다른 앱으로 가자") – SamB

0

이것은이다 : - (그것은 메인 (파란색) 창에서 오프셋 된 거리로 정확히 이동 흰색 대화의 버퍼가 이동 참고) 스크린 샷은 효과를 캡처하지 않습니다 표준 행동; Office 2007/2010에서 정지 할 때이를 알 수 있습니다.

0

은 기본적으로이에 도움이 될 것 두 가지가있다.

둘째, 최상위 창을 여러 개 사용하여 사용자가 볼 수있는 것을 구현하지 마십시오. 대신 자신을 합성하십시오.이렇게하면 레이어가 서로 동기화되지 않도록 이동할 수 있습니다.