Главная Новые темы Список тем Задать вопрос Поиск  

Форум "C++"


С++, его предки и потомки


 #0 Maxwell 03.09.06 03:09:04 - 04.09.06 13:35:14

Динамическое удаление объекта



Ситуация: в созданном мной наследнике потока TThread есть public свойство Tlabel *MyLabel (указатель на метку). При
инициализации потока на главной форме динамически создается эта самая метка MyLabel:

MyLabel=new TLabel(Form1);
MyLabel->Parent=Form1; //теперь метка появилась на форме

когда поток прекращает работу, хорошо бы эту метку динамически прибить. Делаю так:

delete MyLabel;

При выполнении этой строчки возникает исключение "Access violation at address ... in module 'ntdll.dll'. Write of
address ..."

В итоге метка-таки удаляется (т.е. на форме ее уже не видно), но как же все-таки удалить ее правильно, без сообщения об ошибке?

Полный код участка, где происходит попытка удаления:

void __fastcall TMyThread::Execute()
{
     while(!Terminated)
     {
    //здесь выполняется код во время работы потока
     }

     //ПЫТАЮСЬ УДАЛИТЬ!!!
     delete MyLabel;
} Цитата

 #1 Старый маразматик © 04.09.06 09:45:29

а у лабела метод Free есть? или шо-нибуть в этом роде
 #2 Mystic © 04.09.06 11:39:28

См. на метод Synchronize
 #3 FonMax © 04.09.06 12:48:02

какие методы есть ещё? FreeAndNil?
 #4 Mystic © 04.09.06 13:35:14

Основное правило: создание либо освобождение TLabel должно быть либо в контексте основного потока, либо в методе потока, который вызывается через Syncronize.




  • Написать ответ

    Имя: Регистрация HTML?
    smiles смайлики
    Потом перейти в:    
    паутина



      ©  webest.net, 2002-2007  

    top.mail.ru
    » Бесплатный счетчик посещений
    » Рейтинг сайтов