TBITBMP 到底应该怎么释放??
- C/C++ code
bool __fastcall CBmpOp::CreateNameBoard(Graphics::TBitmap *bmpBoard,const AnsiString &strName,int fontsize,long fontcolor,int maxlen){ WideString wstrName=strName; int strlen; strlen=wstrName.Length(); if(strlen>maxlen) { strlen=maxlen; } bmpBoard->PixelFormat=pf24bit; //听说这个地方在BCB和DELPHI中,多线程使用的时候会出问题 bmpBoard->Width=(bmpBoard->Canvas->TextWidth("一")+2)*strlen; bmpBoard->Height=bmpBoard->Canvas->TextHeight("一"); bmpBoard->Canvas->Brush->Color=MASKCOLOR; bmpBoard->Canvas->Font->Color=TColor(fontcolor); bmpBoard->Canvas->Font->Name="宋体"; bmpBoard->Canvas->Font->Height=-1*fontsize; bmpBoard->Canvas->Font->Charset=GB2312_CHARSET; bmpBoard->Canvas->FillRect(Rect(0,0,bmpBoard->Width,bmpBoard->Height)); int p(0); for(int i=0;i<strlen;i++) { //bmpBoard->Canvas->TextOutA(p,0,wstrName.SubString(i+1,1)); ::TextOutW(bmpBoard->Canvas->Handle,p,0,wstrName.SubString(i+1,1).c_bstr(),1); p+=bmpBoard->Canvas->TextWidth(wstrName.SubString(i+1,1))+2; } return true;}//测试代码 for(;;) { Graphics::TBitmap *bmpNameBoard=new Graphics::TBitmap(); CreateNameBoard(bmpNameBoard.....); delete bmpNameBoard; }这是一个完整的函数,会在多线程中用到,我曾经试过用 try...catch ,但是从来没有收到过任何异常,而且在程序运行的时候,通过“任务管理器”观察,也没有看到内存增长。问题在于,当我把他放在多线程中的时候,表现很不稳定,经常得不到我要的结果。。。新建的 TBitbmp,并且在上面使用了GDI绘制图形,完了以后到底应该怎么释放呢??
[解决办法]
这个确实很诡异啊,以前从未听说还需要这样释放。我怀疑官方的例子中是用到了智能指针才需要这样做,当然,仅仅是怀疑。
[解决办法]