윈도우즈 운영체제에서는 윈도우 애플리케이션이 정상 작동 중인지 확인하기 위해서, 지속적으로 윈도우 메시지를 해당 애플리케이션으로 보내는데, 만약 일정 시간이 지나도 응답이 없으면, 해당 애플리케이션이 응답이 없으니 (강제로) 종료하겠느냐는 팝업을 띄운다. 그런데, 게임 등의 애플리케이션을 개발하다 보면 로딩해야 될 리소스가 많아서 시간이 오래 걸릴 경우가 있는데, 그렇게 로딩하는 와중에 이 팝업이 뜨면 유저는 해당 애플리케이션에 문제가 있다고 생각하고 강제 종료를 하게 될 수 있다. 해결 방법은 크게 두 가지이다.

 

1. 로딩 처리를 시간이 많이 드는 부분, 특히 파일 로딩을 비동기로 처리해서 메인 스레드에서 윈도우 메시지 처리가 끊기지 않게 하기.

 

2. 응답 없음 처리(고스팅 처리) 기능을 그냥 끄는 방법

 

1번이 바람직한 방법이긴 하지만, 프로그램 구조를 바꿔야 하고, 바꾸는 와중에 버그가 발생하기도 하고, 암튼 좀 어려울 수 있다. 2번 방식은 그냥 다음의 함수를 한번 호출해 주면 된다.

DisableProcessWindowsGhosting();

링크: https://learn.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-disableprocesswindowsghosting

 

DisableProcessWindowsGhosting 함수(winuser.h) - Win32 apps

호출 GUI 프로세스에 대한 창 고스팅 기능을 사용하지 않도록 설정합니다. 창 고스팅은 사용자가 응답하지 않는 애플리케이션의 주 창을 최소화, 이동 또는 닫을 수 있는 Windows 관리자 기능입니

learn.microsoft.com

참고로, 해당 기능을 다시 켜는 함수는 없다.

VTune Amplifier XE 2015 버전 기준 정보입니다. 최신 버전은 아닙니다!

윈도우즈 cpp 애플리케이션에서 VTune API를 사용해서 프레임을 측정하는 방법입니다.

 

[헤더 파일]

VTune 설치 폴더의 include 폴더를 바로 지정하거나, 자신의 프로젝트로 복사해 온 후 지정한다.

 

[라이브러리]

VTune 설치 폴더의 lib32(혹은 64비트 어플이면 lib64) 폴더를 바로 지정하거나, 자신의 프로젝트로 복사해 온 후 지정한다.

링크 해야 하는 라이브러리 이름은 libittnotify.lib 하나다.

 

[코드 작성]

#include "VTune/include/ittnotify.h"

void WinMain()
{
	// 초기화
	__itt_domain* pVTuneDomain = __itt_domain_create("MyAppName");
	if (pVTuneDomain)
		pVTuneDomain->flags = 1; /* enable domain */
        
	//..........
    
	// 메인 루프 함수
	while (bLoop)
	{
		// 프레임 시작 알림
		if (pVTuneDomain)
			__itt_frame_begin_v3(pVTuneDomain, NULL);
            
            
		// 어플리케이션 루프 코드
		// .......
        
        
		// 프레임 종료 알림
		if (pVTuneDomain)
			__itt_frame_end_v3(pVTuneDomain, NULL);
	}

}

위와 같이 설정을 하고 VTune으로 성능을 측정하면, Frame rate를 확인할 수 있다.

 

 

 

 

 

+ Recent posts