Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

RefInc / RefDec - пора разобраться   Найти похожие ветки 

 
Vladimir Kladov   (2006-01-16 21:14) [0]

Вопрос такой: кто-нибудь активно сабжи юзает? А то я думаю, пора разобраться и переделать немного. Типа так: RefInc N раз дополнительно после создания, и тогда Free надо будет сделать N+1 раз, чтобы окончательно уничтожился. Могу на всякий случай оставить {$IFDEF OLD_REFCOUNT} старый код {$ELSE} новый код {$ENDIF}. Если есть желающие.


 
Thaddy   (2006-01-16 21:53) [1]

I use it in several ways:

1. In threads to guard an object against destruction before another thread that depends on its data has finished. Mainly in communications (lots of threads! one GUI)
2. Wouldn"t it break the KolComObj.pas and similar code?
3. Not important, but the Garbage collection code I translated to KOL depends on it.

Apart from 2. nothing is really important, because I know other means exist, but it means breaking a lot of my code (most not published).
Maybe some more {$DEFINE XXX} as you suggest?


 
Vladimir Kladov   (2006-01-17 20:39) [2]

Ничего не должно сломаться (и даже при более кортком коде), но я на всякий случай оставлю старую версию по OLD_REFCOUNT.


 
homm ©   (2006-01-19 15:59) [3]

У меня в GRush юзается так:
procedure TGRushControl.SetAll_GlyphBitmap;
var     Data: PGRushData;
begin
   Data := PGRushData(CustomObj);
   if Data.fGlyphBitmap <> nil then
       Data.fGlyphBitmap.RefDec;
   Data.fGlyphBitmap := Val;
   Val.RefInc;
end;

destructor TGRushData.Destroy;
begin
   if fGlyphBitmap <> nil then
       fGlyphBitmap.RefDec;
end;

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


 
homm ©   (2006-01-19 16:08) [4]

А в чем смысл перемен? Забыли упомянуть, что отказываетесть от RefDec в [0], или я что-то не уловил?


 
homm ©   (2006-01-19 16:09) [5]

А в чем смысл перемен? Забыли упомянуть, что отказываетесть от RefDec в [0], или я что-то не уловил?


 
Vladimir Kladov   (2006-01-19 19:42) [6]

Оно у вас не ломается, но и не делает Destroy, когда RefDec < 0, проверьте, память должна течь. Чтобы не текло, при прежнем коде следовало бы после создания объекта сделать:
 obj.RefInc; obj.Free; - сразу. В новом варианте как раз все должно работать правильнее.


 
homm ©   (2006-01-19 20:32) [7]


>  obj.RefInc; obj.Free; - сразу.
Дак по-моему так и есть, напрмер в строке
GRushControl.All_GlyphBitmap := NewBitmap(W, H); // obj.RefInc - сразу
а после того, как пользователь сделал какие либо действия, например такие:
GRushControl.All_GlyphBitmap.LoadFromFile;
AnotherGrushControl.All_GlyphBitmap := GrushControl.All_GlyphBitmap;

он должен освободить созданый битмап:
GRushControl.All_GlyphBitmap.Free; //obj.Free - когда работа закончена
При этом реальное уничтожение битмапа заблокировано до момнета, когда ни один контрол больше не будет в нем нуждатся.

ЗЫ Зато обнаружил другую мою ошибку - если GRushControl.All_GlyphBitmap := nil; то сразу AV т.к. nil.RefInc; Исправлюсь ;)



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.046 c
3-1157457783
.ruslan
2006-09-05 16:03
2006.11.05
пустая строка в DBGrid


2-1161240821
Helen
2006-10-19 10:53
2006.11.05
Как скопировать все файлы из каталога


15-1160684515
kolyann..
2006-10-13 00:21
2006.11.05
help!!!


6-1150700215
Чайник2006
2006-06-19 10:56
2006.11.05
Как отправить файл на сервер с помощью idHTTP (Indy 10)


15-1161033290
Ученик чародея
2006-10-17 01:14
2006.11.05
Американский ученый опасается, что инопланетяне взломают Интернет





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский