Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
1

TIdNotify, создание и удаление объекта этого класса

29.03.2013, 17:43. Показов 2455. Ответов 6
Метки нет (Все метки)

Как правильно использовать компонент TIdNotify, а точнее как правильно создавать/удалять объект этого класса.
Искал решение, но так и не нашел вразумительно ответа как очищать память от него.
Если удалять сразу после отсылки (а TIdNotify отсылает сообщение асинхронно), то сразу ошибка ибо вероятно сообщение не успевает обработаться ...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <IdSync.hpp>
//---------------------------------------------------------------------------
class TMyNotify: public TIdNotify
{
  public:
    int Num;
  protected:
    virtual void __fastcall DoNotify()
     {
       Form1->Memo1->Lines->Add(Num);
     }
};
//---------------------------------------------------------------------------
int num=0;
//---------------------------------------------------------------------------
void __fastcall TForm1::IdThreadComponent1Run(TIdThreadComponent *Sender)
{
  Sleep(100);
 
  TMyNotify* MyNotify = new TMyNotify;
  MyNotify->Num= num;
  MyNotify->Notify();
 
  // delete Notify; // <- тут ошибка, а без этого вероятно утечка
 
  num++;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   IdThreadComponent1->Active= !IdThreadComponent1->Active;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  if(IdThreadComponent1->Active)
        IdThreadComponent1->TerminateAndWaitFor();
}
//---------------------------------------------------------------------------
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.03.2013, 17:43
Ответы с готовыми решениями:

Возможно ли создание объекта шаблонного класса в функции этого класса?
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание - реализовать шаблон...

Создание объекта класса внутри этого класса
Можно ли улучшить такой код: // C# program to illustrate the // use of object type params ...

Создание объекта класса в методе этого же класса
собственно вопрос. можно ли создавать объект класса в методе того же класса? насколько это...

Передача объекта из одного экземпляра класса в другой с запретом обращаться к методам и свойствам этого объекта
Всем привет! Есть класс, в котором используется объект (MyObject, объявленный в private). При...

6
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32489 / 20975 / 8115
Регистрация: 22.10.2011
Сообщений: 36,248
Записей в блоге: 7
29.03.2013, 18:41 2
Задавался подобный вопрос на оф. сайте Эмбаркадеро. До 10-ой версии Indy в TIdNotify была утечка, потом ее убрали. Можно использовать вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class TMyNotify: public TIdNotify
{
protected:
    virtual void __fastcall DoNotify()
    {
        Form1->Memo2->Lines->Add(Num);
    }
public:
    TMyNotify(int ANum) : Num(ANum)
    {
    }
 
private:
    int Num;
};
 
void __fastcall TForm1::IdThreadComponent1Run(TIdThreadComponent *Sender)
{
  Sleep(100);
 
  (new TMyNotify(num))->Notify(); // Уничтожается самостоятельно
  num++;
}
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.03.2013, 19:14  [ТС] 3
Ну у меня XE3 там Indy v10.5.9.0 , мой пример аналогичен вашему как я понимаю, и не должен вызывать утечек ?

Просто смотрю диспетчером - память постоянно растет ....

Добавлено через 1 минуту
Цитата Сообщение от UI Посмотреть сообщение
C++
1
(new TMyNotify(num))->Notify(); // Уничтожается самостоятельно
- Дикая запись однако
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32489 / 20975 / 8115
Регистрация: 22.10.2011
Сообщений: 36,248
Записей в блоге: 7
29.03.2013, 19:36 4
Я тоже смотрел диспетчером. Как было потребление памяти в 4 Мб, так и осталось (XE2, соответственно Indy версии 10.5.8.0)

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Дикая запись однако
Нормальная запись

0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.03.2013, 19:55  [ТС] 5
Ну уж не знаю у меня медленно но уверенно растет.
0
4041 / 2330 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
29.03.2013, 22:37 6
А строки, добавляемые в memo? Не они ли добавляют эти жалкие байтики?
1
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.03.2013, 02:51  [ТС] 7
Цитата Сообщение от BRcr Посмотреть сообщение
А строки, добавляемые в memo? Не они ли добавляют эти жалкие байтики?
Возможно ... надо проверить ...

Добавлено через 3 часа 59 минут
Да и в правду, заменил на
C++
1
Form1->Memo1->Text= Num;
И память перестала расти... - тупанул однакО...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.03.2013, 02:51
Помогаю со студенческими работами здесь

Инициализация объекта класса объектом этого же класса
В задаче создается объект класса hoba, в который добавляются объекты базового и производного...

Построение описания класса, создание и уничтожение объектов этого класса
Построить описание класса, содержащего информацию о почтовом адресе организации. Предусмотреть...

Создание статической функции класса, которая принимает экземпляр этого же класса как объект
Привет. Есть такой код class Model { public: Model(); Model(int verticesSize, int facesSize);...

Создание объекта класса с полем являющимся объектом другого класса
Bill a; cin&gt;&gt;a;//тут я ввел с помощью перегруженного оператора ElementSpiska c; //поля у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru