반응형
으아악....
메모리릭 릭이 발생하잖아 이건 모야??!!!!!
(아래 메모리릭은 웹서핑으로 구한것..내 문제가 해결되서 더이상 아래와 같은 문구가 보이지 않아 다른데서 구해옴.;;)
왠 메모리릭?? 오마이갓...
내가 메모리를 할당해놓고 해제를 안한건 아닌데..이것들은 무엇이지????
정말 한참을 해맸다..
쓰레드를 만들때 CWinthread인 AfxBeginThread함수를 사용해서 쓰레드를 생성했는데 이놈땜시 문제가 발생한것이었다.
AfxBeginThread쓰레드로 처리함수를 등록하면 처리함수가 정상적으로 return을 해서 처나와야지만 저런 메모리릭이 발생하지
않는다.;; 이런 젠장..;; 괜히 저걸로 했어..;;ㅠㅠ
그래서 귀찮음을 무릅쓰고 각 쓰레드 마다 return 바로전 변수를 하나 줘서 탈출 했는지 안했는지를 판단할 수 있게끔
만들어 놓고 프로그램 종료전 그 변수를 모두 체크해서 정상적으로 루프를 탈출했는지 체크함으로써
아래와 같은 메모리릭을 해결할 수 있었다...
Detected memory leaks!
thrdcore.cpp(166) : {140} client block at 0x00433140, subtype 0, 112
bytes long.
a CWinThread object at $00433140, 112 bytes long
thrdcore.cpp(166) : {135} client block at 0x00433410, subtype 0, 112
bytes long.
a CWinThread object at $00433410, 112 bytes long
-----------------------------------------------------------------------------------------------------------------------
근데 나는 여기서 한가지 문제를 더 겪었다...
부모 다이얼로그에서 자식 다이얼로그가 생성한 쓰레드를을 모두 탈출하라고 명령을 내린뒤.. 루프를 돌며 모두 탈출했는지를
체크할려고 하는데..글쎄 자식다이얼로그 쓰레드 CListCtrl에 데이터를 넣는순간...홀딩이 되어버리는 것이었다...
느낌상으로 부모 윈도우가 루프를 돌며 주도권을 잡고 있어서 부모다이얼로그에 붙어있는 리스트컨트롤이 부모 윈도우가 풀릴때까지
대기 하고 있는것 같았다..물론 확인해보니 부모윈도우의 루프가 풀려 주도권이 해제되어야지만 자식다이얼롤그의 쓰레드가 다시
수행되었다..;; 아놔;;
이걸 어떻게 감시할까?? 고민끝에..Timer를 이용해 깔끔히 해결..;;;
쓰레드를 만들어 감시하려고 했으나 아시는 분이 팁으로 쉽게 해결함.....이렇게 생각의 폭이 좁아서야..ㅠㅠ...아직도 갈길이 너무 멀구만
암튼 메모리릭으로 시작해서 그로 인해 발생한 문제까지 깔끔하게 해결하였다.
아..정말 공부좀 해야지..ㅠㅠ
반응형
'Study > MFC' 카테고리의 다른 글
리스트 컨트롤에서 해당열을 클릭시 이벤트 처리 (0) | 2011.09.28 |
---|---|
CString 문자열 조작 메소드~~~ 오홍오홍~~ (0) | 2011.09.28 |
파일 정보 얻기!!!!!!~~~~ (0) | 2011.09.28 |
휴지통관련 API ~~ 굿이에요 굿굿!! (0) | 2011.09.28 |
FILETIME 구조체로 시간 (0) | 2011.05.02 |
댓글