MaPro

Обсуждение различной информации связанной с картографией, а так же сторонние программные продукты

Модераторы: Tolik, zed

Re: MaPro

Сообщение Alexander » 16 янв 2009, 22:46

vdemidov писал(а):Так даже в седьмой делфе интерфейсы подсчитывали ссыкли и уничтожались. Достаточно переменную типа IIndexTreeElement со сылкой на интерфейс присвоить nil и объект будет удален.


А может подскажите, вызывается деструктор Destroy у объекта при таком удалении?
Мне необходимо при удалении объекта производить некоторые действия.
Хотя сам проверю когда время будет.
Alexander
Соображающий
 
Сообщения: 78
Зарегистрирован: 14 июл 2008, 09:09
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: MaPro

Сообщение svp » 16 янв 2009, 23:30

Какой тип у m_elements[bl]?
Зачем перекрывать метод free?!!
Код: Выделить всё
procedure TIndexTreeElement.free;
begin
  if Self <> nil then Self.Destroy;
end;


Вот здесь:
Код: Выделить всё
  IMemoryUser = interface(IInterface)
    ['{69856B39-CEC0-42F0-87EF-AE870FE20C0A}']
    procedure free;
  end;

"procedure free;" быть не должно!

Не знаю как в 2009, но в 6 дельфях, если не используешь COM, GUID'ы присваивать не обязательно. С помощью них можно было бы создать экземпляр класса, обслуживающего интерфейс, не зная о нём ничего, кроме этого самого гуида.

В описании сласса TIndexTreeElement, еадо убрать "procedure free;". Вы перекрываете метод, который правильно уничтожает экземпляр объекта и вызывает деструктор.

Вот этого:
Код: Выделить всё
procedure TIndexTreeElement.free;
begin
  if Self <> nil then Self.Destroy;
end;

Тоже быть не должно! Все проблемы у тебя именно от этого метода free=). Ты варнинги при компиляции читаешь вообще?=))) Там очень полезные вещи пишутся.

Alexander писал(а):А может подскажите, вызывается деструктор Destroy у объекта при таком удалении?
Мне необходимо при удалении объекта производить некоторые действия.
Хотя сам проверю когда время будет.

Да конечно! Но вы перекрыли правильный метод Free. К тому же вызывать его не нужно для интерфейсов. Достаточно обнулить ссылки и дельфи сделает всё за тебя.

Итак:
Код: Выделить всё
type
  IMemoryUser = interface(IInterface)
    ['{69856B39-CEC0-42F0-87EF-AE870FE20C0A}']
  end;

  IIndexElementsIterator = interface(IMemoryUser)
    ['{E512EC2B-16A5-4F38-A320-F7EB0777CCAC}']
    procedure reset;
    function hasNext: boolean;
    function next: Int64;
  end;

  IIndexTreeElement = interface(IMemoryUser)
    ['{AA39ADC5-FB8B-4A9F-A6F3-87A5BA863222}']
    function isExists(number: int64): boolean;
    function isNotExists(number: int64): boolean;
    function isNotExistsOnServer(number: int64): boolean;
    procedure setExists(number: int64);
    procedure setNotExists(number: int64);
    procedure setNotExistsOnServer(number: int64);
    function existsCount: Int64;
    function notExistsOnServerCount: Int64;
    function usedMemory: Int64;
    procedure clear;
  end;

  TIndexTreeElement = class(TInterfacedObject, IIndexTreeElement)
  private
    m_elements: TIndexElementsArray;
    m_level: TTreeLevel;
    m_iCoef: Int64;
    m_iFirst: Int64;
    constructor Create(first: Int64; coef: Int64; level: TTreeLevel);
    function getSubTree(number: Int64; cr: boolean): IIndexTreeElement;
  public
    destructor Destroy; override;
    function isExists(number: Int64): boolean;
    function isNotExists(number: Int64): boolean;
    function isNotExistsOnServer(number: Int64): boolean;
    procedure setExists(number: Int64);
    procedure setNotExists(number: Int64);
    procedure setNotExistsOnServer(number: Int64);
    function existsCount: Int64;
    function notExistsOnServerCount: Int64;
    function usedMemory: Int64;
    procedure clear;
//    procedure free; // Этой строчки не должно быть!!!
  end; 
//------------------------------------------
//        ..
//------------------------------------------
procedure TIndexTreeElement.clear;
var i: Integer;
begin
  if Self = nil then exit;
  for i := 0 to ElementsCount - 1 do
  begin
    if m_elements[i] <> nil then
      m_elements[i] := nil; // надо вот так.
//      m_elements[i].free;
  end;


тип TIndexElementsArray должен быть массивом интерфейсов, а не массивом объектов.
Аватара пользователя
svp
Советчик
 
Сообщения: 446
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: MaPro

Сообщение Alexander » 24 янв 2009, 13:27

svp писал(а):Какой тип у m_elements[bl]?

Тип IIndexTreeElement.

svp писал(а):Зачем перекрывать метод free?!!

Теперь незачер, раньше думал что его можно вызывать будет )

svp писал(а):Не знаю как в 2009, но в 6 дельфях, если не используешь COM, GUID'ы присваивать не обязательно. С помощью них можно было бы создать экземпляр класса, обслуживающего интерфейс, не зная о нём ничего, кроме этого самого гуида.


GUID'ы нужны для проверки на принадлежность интерфейсу.

svp писал(а):В описании сласса TIndexTreeElement, еадо убрать "procedure free;". Вы перекрываете метод, который правильно уничтожает экземпляр объекта и вызывает деструктор.


Метод идентичен оригинальному, так что не страшно такое перекрытие. Но раз его нельзя вызывать, то уберу.

svp писал(а):Ты варнинги при компиляции читаешь вообще?=))) Там очень полезные вещи пишутся.


Читаю, варнингов ни одного нет (кроме конечно насчёт использование платформазависимых библиотек).

svp писал(а):Да конечно! Но вы перекрыли правильный метод Free. К тому же вызывать его не нужно для интерфейсов. Достаточно обнулить ссылки и дельфи сделает всё за тебя.


При обнулении ссылок всё и сейчас отлично срабатывает.

svp писал(а):тип TIndexElementsArray должен быть массивом интерфейсов, а не массивом объектов.


Так и есть.

П.С. Большое спасибо за помощь, разобрался с этой темой.
Alexander
Соображающий
 
Сообщения: 78
Зарегистрирован: 14 июл 2008, 09:09
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: MaPro

Сообщение ciberhunter » 29 янв 2009, 00:13

Здравствуйте Александр вижу вы продолжаете работу на программой MaPro!! Так уж получилось я не мог следить за вашей работой. Сейчас я просматриваю сайт регулярно. Есть проблемка не могу скачивать с рапида и тому подобных. Можно ли выложить вашу программу в другом месте? Очень охото посмотреть новую версию
ciberhunter
Новичок
 
Сообщения: 25
Зарегистрирован: 14 июл 2008, 08:31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: MaPro

Сообщение Alexander » 29 янв 2009, 16:52

ciberhunter
Особо ничего нового нет, напомните почту в ЛС, вышлю.
Времени совсем нет, поэтому новую версию стоит ждать не скоро.
Alexander
Соображающий
 
Сообщения: 78
Зарегистрирован: 14 июл 2008, 09:09
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: MaPro

Сообщение ciberhunter » 01 фев 2009, 17:40

Вы еще не посылали на мой е-майл программу? Мне пока ничего не пришло. На крайний случай можно через аську кинуть.
ciberhunter
Новичок
 
Сообщения: 25
Зарегистрирован: 14 июл 2008, 08:31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: MaPro

Сообщение Alexander » 01 фев 2009, 18:14

ciberhunter писал(а):Вы еще не посылали на мой е-майл программу? Мне пока ничего не пришло. На крайний случай можно через аську кинуть.

Мне не приходило ЛС с указанием вашей почты.
Alexander
Соображающий
 
Сообщения: 78
Зарегистрирован: 14 июл 2008, 09:09
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: MaPro

Сообщение ciberhunter » 02 фев 2009, 11:55

Повторил отправку ЛС
ciberhunter
Новичок
 
Сообщения: 25
Зарегистрирован: 14 июл 2008, 08:31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

MaPro

Сообщение Alexander » 24 фев 2009, 15:42

MaPro 2.0 превью
Выкладываю прототип новой версии MaPro, полностью переписанной с 0. Кэш новый, но старый не выбрасывайте )) , появиться и возможность импорта из него в будущем. Многозадачной закачки пока тоже нет. Требования к ОЗУ возрасли (т.к. появилось кэширование), скорость отрисовки соответственно увеличилась. Также появилось построение карты отсутствия (или заполнения уж не знаю =)).

Смотрите, ждите, новая версия появится ближе к лету или в начале лета.
Alexander
Соображающий
 
Сообщения: 78
Зарегистрирован: 14 июл 2008, 09:09
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: MaPro

Сообщение ciberhunter » 25 фев 2009, 01:16

Просмотел программу. В целом работает, но она очень сырая. Это скорее альфа или пре-альфа чем бета.
Не понял в программе можно выделение делать? Или это пока вьюер такой? И что-то я быстро бан схватил на sat картах
ciberhunter
Новичок
 
Сообщения: 25
Зарегистрирован: 14 июл 2008, 08:31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Пред.След.

Вернуться в Другие

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron