|
VCL 컨트롤 자체가 스레드로 돌고 있기 때문에;;;
CriticalSection을 주려면 VCL 내부 소스에 줘야 하겠지요.
김정현 님이 쓰신 글 :
: CriticalSection은 사용해봤는데 같은 결과가 나왔었습니다.
: 하지만 태윤님께서 말씀하신 것과 같이 Synchronize 사용하니까 되네요.
: 근데 CriticalSection도 같은 결과를 얻는 것이 아니었나요?
: 뭐가 다른건지 공부해야겠습니다.
: 선입견 때문에 Synchronize로 테스트 해볼 생각도 하지 않았다는 것이 부끄럽네요.
: 감사합니다~!
:
:
:
:
:
: 방태윤 님이 쓰신 글 :
: : 이게 원인인지는 모르지만
: :
: : 쓰레드에서 화면 출력이랑 관계될땐 Synchronize 를 써야 하는걸로 알고 있는데요...
: :
: : 해 보셨는지요?
: :
: : 수고하세요,
: :
: :
: : 김정현 님이 쓰신 글 :
: : : 쓰레드의 Execute() 함수에서
: : :
: : : Graphics::TBitmap *bmpOverlay = new Graphics::TBitmap();
: : : bmp->SetSize(640,480);
: : : while(!Terminated) {
: : : Sleep(25);
: : : myControl->DrawLiveCam(bmp);
: : : }
: : : bmp->Free();
: : :
: : : 이렇게 DrawImage()에서 buffer에 있는 image를 bmp->canvas에 뿌려주고,
: : : bmp->canvas에 선, 텍스트 등 overlay image를 그려주고,
: : : myControl의 canvas에 draw() 해줍니다.
: : :
: : : 그런데 이 컴포넌트를 폼에 올려놓고 사용하면 영상이 잘 나오다가
: : : 마우스가 폼 위에 올라오기만 하면 멈춰버립니다.
: : : bmp를 draw 함수 내에서 생성/삭제를 하면 영상이 멈추지는 않지만
: : : 마우스가 폼 위에서 움직일 때마다 bitmap 관련하여 메모리 누수 현상이 생깁니다.
: : :
: : : 그냥 buffer에 있는 영상만을 뿌려주는 것은 문제가 되지 않는데
: : : bitmap을 사용하면서 생기는 문제로 보입니다.
: : :
: : : 어떻게 해결할까요...ㅠㅠ
|