너무 쉬운 문제인가 ㅡㅡ;
지난학기까지만 해도 winapi로 윈도우 프로그램을 종료할때 exit(0);을 썻어.
'c할때도 저거 썻으니까 됨^^'<- 이렇게 생각했거든. 그리고 실제로도 꺼지니까 되는줄 알았어.
근데 이거 쓸때마다 뭔가 이상한거야. 그래서 directX패널에서 디버그로 놓고 빌드한다음에 exit(0)으로 빠져나와 봤어.
Direct3D9: (INFO) :MemFini!
Direct3D9: (ERROR) :Memory still allocated! Alloc count = 121
Direct3D9: (ERROR) :Current Process (pid) = 00000aa8
ESS_CORE.exe이(가) 중단점을 트리거했습니다.
리테일로 놓고 하면 그냥 종료되고 끝났었는데 디버그로 놓고 하면 브레이크 포인트가 걸리더라..
디테일하게 보니까 리테일로 해도 D3DX: MEMORY LEAKS DETECTED: 2 allocations unfreed (448 bytes)
라고 종료는 되었으나 경고는 떳더라고.
그래서 구글링을 해보니까 exit(0)은 무조건 종료(?)라서 클래스들의 소멸자 호출이 안일어 난다는 이야기가 있더라
설마 이것도 비슷한건가? 싶어 윈도우 메세지 WM_DESTORY에 브레이크 건다음 exit(0)을 호출하니까 WM_DESTORY가 안들어오고
종료가 되더라고..ㅡㅡ; WM_EDSTORY에서 장치 지우고 동적할당한거 지우도록 코딩을 했으니 당연히 메모리가 새겠지.
그렇다면 어떻게 해야할까해서 생각한게 exit(0) 대신 WM_DESTORY에 통지를 보내는거야. 이렇게↓↓
SendMessage(FindWindow("win",NULL),WM_DESTROY,0,0);
이렇게 하니까 메모리도 경고없이 정상적으로 종료됨... 근데 이렇게 해도 되는건가?
콛는sendmessage 처리하고 리턴되서 돌아오면 최종적으로 winmain까지 빠져나간다음 return 0으로 코딩했어.
근데 정상적인 절차가 맞는지 모르겠어. 함수도 따로있을꺼같은데 네이버 구글 에서 키워드 뽑아가면서 해봤는데 잘 안걸리더라고.
질문 요약
1. exit(0)는 문제가 있는거같어
2. 그래서 sendmessage를 써보니까 문제가 없네?
3. 이렇게 해도됨? 함수가 있을꺼같은데..
AfxGetMainWnd()->SendMessage(WM_CLOSE, 0, 0); ??????
ㅇㅇ//결국 샌드 메세지잖앜ㅋㅋㅋㅋㅋㅋㅋㅋ WM_CLOSE 호출된다음에 WM_DESTORY호출되는데 WM_CLOSE에서 cleanup(릴리즈해주는 함수) 해버리면 약간의 오류가 있는거까지는 확인했어.
라스베가스바카라→【주소▶affn5.w70.kr◀복사】←라스베가스바카라◇라스베가스바카라◇라스베가스바카라━━라스베가스바카라