저번에 질문 올렸다가 다른 문제인줄 알고 다른 문제인것 같습니다 라고 적었습니다만..
사용 IDE 는 BCB6.0 Ent입니다.
COM과 관련된 누수로 파악하고 이리저리 하다가 못찾고 ATL이 사용 가능하다는 것을 알아내서
CComPtr로 모든 관련 객체를 자동 해제 되게 만들어도
발생하여서 디버깅 하다보니 다시 원 위치로 돌아 갔습니다.
해당 함수는 메인 쓰레드와는 별개의 다른 쓰레드내부에서 생성한 윈도우 멀티미디어 타이머가 호출하며.
DirectShow의 SampleGrabber로 받아온 현재 캠 데이터를 받아서 Graphics::TBitmap으로 만든뒤
좌상단에 현재 시간 정보를 적는 함수입니다.
두번 TextOut하는 이유는 글자색과 배경색이 같으면 글자가 안보이기에 일단 임시로 넣은 그림자가 한번 들어간다고 생각하시면 됩니다.
XY좌표를 각각 1씩 줄이고 크기를 1늘이고 굵게 설정을 해준 배경을 먼저 쓰고 이후 실제 표현한 글을 적은것입니다.
void t_cam::bmp_add_time(Graphics::TBitmap *bmp, TFont *font){
AnsiString time = FormatDateTime("hh:nn:ss", Now());
for(int i=1; iCanvas->Brush->Style = bsClear;
bmp->Canvas->Font->Name = font->Name;
bmp->Canvas->Font->Size = font->Size +1;
bmp->Canvas->Font->Style = TFontStyles() << fsBold;
bmp->Canvas->Font->Color = clWhite;
bmp->Canvas->TextOut(i*font->Size -1, 4, time.SubString(i,1));
bmp->Canvas->Font->Size = font->Size;
bmp->Canvas->Font->Style = TFontStyles();
bmp->Canvas->Font->Color = clBlack;
bmp->Canvas->TextOut(i*font->Size, 5, time.SubString(i,1));
}
}
아예 함수의 TextOut부분만 뺄경우 따로 GDI헨들이 크게 증가 하지 않지만
(프로그램이 유동적으로 비트맵같은 이미지등을 생성했다가 지웠다가 해서 좀 변합니다. 캠 두개면 대충 110개 미만의 헨들을 가집니다.)
TextOut부분만 들어가면 틈틈히 GDI헨들이 증가하고
한 12시간 정도 작동하다가 뻗습니다.
|