한시운 님이 쓰신 글 :
:
: Graphics::TBitmap *bmp=NULL;
:
: bmp=new Graphics::TBitmap;
: bmp->Width=Panel->ClientWidth;
: bmp->Height=Panel->ClientHeight;
: bmp->Canvas->Brush = Panel->Brush;
: bmp->Canvas->FillRect(Panel->ClientRect);
: bmp->Canvas->Lock();
:
:
: 대략 이런식으로 생성할때 쓰는것 같은대 bmp->Canvas->Lock(); 이게 의미가 뭔지 왜 있어야 하는건지를 모르겠내요
:
답변:
여러 쓰레드에서 동시에 Canvas 개체를 액세스할 때 동기화 하기 위한 목적으로 사용하는 거고
쓰레드가 관여되지 않으면 사용할 필요 없습니다.
그리고...
멀티 쓰레드로 액세스할 때.. 굳이 Canvas의 Lock()을 사용해야 하는 것은 아니고
일반적인 크리티칼섹션 API 써도 됩니다.
코드 사용 패턴은....
void foo()
{
Canvas->Lock();
.....
캔버스 액세스 호출들...
.....
Canvas->Unlock();
}
형태가 되어야 하고요.
|