Утечка памяти при StretchDraw
От: MaxxSPIC  
Дата: 17.08.04 08:28
Оценка:
Может быть кто-нибудь сталкивался с такой неприятностью,
буду очень благодарен за добрый совет.

это упрощённый кусок кода потока, загружающего фотографии в различные компаненты приложения


  TPicture *Picture = new TPicture();
   Picture->RegisterFileFormat(__classid(TJPEGImage), "jpg", "jpg",__classid(TJPEGImage));
   while(!Terminated)
   {
         QueueIn->NotEmpty->WaitFor(1000);
         if(QueueIn->Size <= 0)
            continue;

         TFotoLoaderItemIn *InItem = QueueIn->Pop();  // если очередь не пуста, достаем из неё запрос на загрузку фотки

         Picture->LoadFromFile(InItem->Path);         // грузим фотку

         TFotoLoaderItemOut *OutItem = new TFotoLoaderItemOut(InItem->Width, InItem->Height); //создаём элемент для исходящей очереди,
                                                                                   //содержащий екземпляр Graphics::TBitmap
                                                                                   //(создаваемый в конструкторе TFotoLoaderItemOut,
                                                                                   // там же задаются его размеры)

/* !!! */OutItem->Bitmap->Canvas->StretchDraw(OutItem->Bitmap->Canvas->ClipRect, Picture->Graphic);
//Вот тут то вся и проблема!
//Не знаю почему, но использование этого метода приводит к катострофической утечке памяти!
//То же самое, но с методом Draw никаких проблем не вызывает

         QueueOut->Push(OutItem);                     // помещаем в исходящую очередь
         SendMessage(InItem->ParentHandle, FMessageNum, 0, 0); //и шлём сообщение заказчику, о том, что запрос выполнен 

         delete InItem;
   }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.