PDA

Просмотр полной версии : Нубовопрос про tlist :)


mira
18.07.2011, 10:50
Господа vcl-щики подскажите при вызове метода tlist.delete (clear) обьект titem просто удаляетса из списка или вызываетса его деструктор?

задача что нужно раз в сек сбрасывать tlist и перезаполнять. Если 2е то шляпа выдет пересоздавать элементы каждый раз.

alexteam
18.07.2011, 11:32
просто удаляется.

procedure TList.Delete(Index: Integer);
var
Temp: Pointer;
begin
if (Index < 0) or (Index >= FCount) then
Error(@SListIndexError, Index);
Temp := Items[Index];
Dec(FCount);
if Index < FCount then
System.Move(FList^[Index + 1], FList^[Index],
(FCount - Index) * SizeOf(Pointer));
if Temp <> nil then
Notify(Temp, lnDeleted);
end;

xkor
18.07.2011, 14:01
mira, TList это просто список, ничего кроме хранения указателей он не делает. Для хранения объектов имхо удобнее TObjectList, ему при создании можно указать вызывать ли Free для удаляющихся элементов.

mira
19.07.2011, 00:47
Значит titem не обязан вообще быть обьектом (классом)?
Если не обязан то вооще конфета. Мне нада хранить в листе указатели на структуры. Применять к ним сортировку ну и читать из листа их.

то прилип на реализации листбокса средствами директ-х.

Добавлено через 9 часов 33 минуты
еше вопросец на тему классов :)
вот такой код

TA = class(TObject)
....
end;
TB = class(TA)
...
end;
var
myA : TA;
myB : TB;

begin
MyB:=TB.Create;
MyA:=MyB; //это с точки зрения компиллятора корректно
MyB:=MyA; //а тут по понятным причинам лажа


есть ли способ корректно сделать присвоение 2 типа (желательно с проверкой на совместимость) ?

GoodDrone
19.07.2011, 01:17
есть ли способ корректно сделать присвоение 2 типа (желательно с проверкой на совместимость) ?

MyB := MyA as TB; //кинет EInvalidCast, если неверный тип
MyB := TB(MyA); //тихо присвоит

mira
19.07.2011, 10:13
Мощненька
пасиб:)

xkor
20.07.2011, 21:58
Значит titem не обязан вообще быть обьектом (классом)?эм, что ещё за TItem?

mira
26.07.2011, 15:14
Все спс сделал как хотел =)

mira
15.08.2011, 16:14
Шота я не понял фастмм (альтернативный мм-манагер) по дефолту чтоле непотокобезопасный?

в приложении при непанятных обстоятельствах возникают какието странные ошибки и приложение падает в различных местах без вывода ошибок зачастую. Сделал трассировочные переменные и опа - фейл на s:='npc/'+name+'/'+charname или какомнеть strnew.

Добавлено через 3 минуты
В проге могут выделять/освобождать память аж 3 нити.
Такая картина будто мм иной момент пытаетса выдать одну и туже память двум нитям разом и разваливаетса 'карта кучи' программы.

GoodDrone
15.08.2011, 16:28
Шота я не понял фастмм (альтернативный мм-манагер) по дефолту чтоле непотокобезопасный?

Поток надо стартовать System.BeginThread, либо руками выставить System.IsMultiThread := True.

mira
15.08.2011, 16:42
Ну ппц год не могу вычислить откуда берутса исключения einvalidpointer или раз в неделю в строку мусор попадает.

скоко свое время про делфа читал и про мультитреды нигде не упомянуто про мм.

Morfik
15.08.2011, 16:52
Поток надо стартовать System.BeginThread, либо руками выставить System.IsMultiThread := True.

тож имею разного рода глюки с прогами юзающими потоки, тоесть стоит позаменять свои апи CreateThread(...) на System.BeginThread ??

GoodDrone
15.08.2011, 17:10
http://docwiki.embarcadero.com/VCL/en/System.BeginThread
Use this routine or a TThread object to spawn separate threads of execution. BeginThread spawns a new thread of execution and sets the global IsMultiThread variable, thereby making the heap thread-safe.

По сути можно оставить как есть, достаточно IsMultiThread True выставить.

mira
15.08.2011, 17:53
Фастмму вроде пофиг на эту переменную у него там своя какаято (это я про навесной фасстмм для д7 и ниже)но суть таже

Добавлено через 31 минуту
непонял нифига как в фастмме включить это.
так чтоли:

library IOHP;

{$define AssumeMultiThreaded}

uses
FastMM4 in '..\FastMM\FastMM4.pas',
FastMM4Messages in '..\FastMM\FastMM4Messages.pas',
Windows,
Messages,
SysUtils,
TlHelp32,
graphics,
FFuncs in '..\FFuncs.pas',
RootKit in 'RootKit.pas',

GoodDrone
15.08.2011, 18:16
RootKit in 'RootKit.pas'

Хакир!

mira
15.08.2011, 18:57
чорт сфейлилса. мне теперь незахватить мир

Yegor
18.08.2011, 02:29
Расскажите в чем причина использования альтернативного менеджера памяти в Delphi типа fastmm? Неужели со свтроенным так все плохо? Какой прирост производительности можно получить?

xkor
18.08.2011, 03:11
Yegor, поправочка, со встроенным было всё плохо, начиная с версии 200? (точно номер не помню) fastmm встроен по умолчанию, не знаю правда с какими настройками и насколько полностью встроен

Yegor
18.08.2011, 03:31
Ели я использую Delphi 7 то есть смысл использовать fastmm?

xkor
18.08.2011, 10:13
Yegor, да

mira
18.08.2011, 19:43
Ели я использую Delphi 7 то есть смысл использовать fastmm?

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

для большинства случаев эта плата незначительна.

mira
28.08.2011, 13:27
еще возник вопрос к бронтозаврам VCL-а. решил поправить редактор БДшки. есть скажем кнопка "добавить запись в БД". хочу чтоб выкатилось какоенить окошко с полями ввода, указать параметрый создаваемой записи - нажать ОК и готово. но вот проблема - та форма будет в другом юните и ей будут недоступны переменные основоного. среди стандартных никаких шаблонов нет =(

mira
25.09.2011, 16:41
ватафака))))
делаю билдер синтаскических выражений, руский язык всеже хуже ассемблера

вот фраза "вася дай патроны" билдитса как
лицо : вася (имя)
запрос : дать (глагол)
объект : патрон (сущ мн. число)

а фраза "дайте соски"
лицо : соски (сущ мн число)
запрос : дать (глагол)

и как ему объяснить нужно мне дать сосок или я прошу "сосок" "дать"

SeregaZ
25.09.2011, 18:03
делай еще одну функцию, которая бы определяла лицо это лицо или объект.

mira
26.09.2011, 23:19
ну ладно этим можно пречебреч, пусть отвечает "соски не могут вам дать прямо сейчас". теперь думаю по каким правилам привязывать прилагательные к тому или иному объекту. открыл курс руссково языка я офигел от числа правил определений и исключений. как тока этому гамну меня еще пытались учить в 5 классе.

кароче ищу училку по русскому языку, можно в очках. оплата гарантируетса.

SeregaZ
26.09.2011, 23:39
не знаю я насчет интеллектов всяких искусственных - полагаю тут нужна таблица, причем для каждого случая разное количество столбиков. поясняю:
сначала определяется количество сосок. 1, 2, 5, 21, 22 и так далее. по возможности вычисляется что-то типа прогрессии, под которую можно подгонять склонения.
типа если 1 то им. соска, дат. соску
если больше 1 - им. соски, дат. соски
если больше 4, то им. сосок, дат. соски
если 21 - то, им соска, дат соску
если больше 21, то им. соски, дат. соски
****
упрощаем эту таблицу применяя звездочку - подразумевая любую цифру, в том числе пустой символ
если *1 - то соска, соску
если больше от *2 до *4 соски, соски
если от *5 до *20 сосок, сосок

теперь мы определили как правильно будет писать что-то типа:
22 соски не могут вам дать прямо сейчас

исходя из соски будем строить дальше выражение и немного перефразируем:
22 соски не могут быть вам выданы
21 соска не может быть вам выдана

видим разницу, и довносим в нашу таблицу еще 2 столбика, и кстати ноль еще надо добавить включит и сам 0 сосок, 100 сосок, 1000 сосок:
если *1 - то соска, соску, может, выдана
если больше от *2 до *4 соски, соски, могут, выданы
если (от *5 до *20) ИЛИ *0 то сосок, сосок, могут, выданы

mira
27.09.2011, 00:32
ты непонял с разбором вроде все норм. проблема всю эту конструкцию собрать в единый граф.

SeregaZ
27.09.2011, 01:09
а мы сейчас о чем? о построении ответов на вопросы, или пока еще о разборе предложений?

mira
27.09.2011, 01:55
ну какбе у меня рекурсивный разбор предложения, тоесть слова все определяютса в простых предложениях прально.
типа там глагол/сущ какова рода какова склонения и падежа.

щас задача слинковать это к виду типа:

"дядя вася быстро побежал на площадку"
>объект = вася [атрибуты = дядя]
>действие = бежать [атрибуты=быстро]
>субъект = площадка [атрибуты=NULL]

"дай больших соленых семечек дорогой"
>объект = default [атрибуты = дорогой]
>действие = дать [атрибуты = NULL]
>субьект = семечко [атрибуты = соленый, большой]

потом все это дело сбилдить в опкоды а дальше пока тайна ;)

SeregaZ
27.09.2011, 09:03
ой смотри... потом твоя скайнет пентагон взломает и устроит апокалипсис... я даже знаю что ты программу свою в декабре следующего года закончишь.

кстати! как ты предусмотришь разбор предложения, если одно-два слова написаны с ошибками, и допустим проблема с запятыми? :) у меня была мысль прикрутить в этом плане гугл - точней, там когда вбиваешь запрос с ошибкой, он тебя не назойливо поправляет: возможно вы имели ввиду бла бла бла? но дальше теории дело не пошло...

mira
27.09.2011, 18:41
если я буду еще анализировать орфографию это точно будет до декабря :) задача пока понимать смысл простых предложений с определенной погрешностью.

старый проект закрыл только иза того что все поставленые задачи и цели достигнуты и получена отменная стабильность ;)

mira
28.09.2011, 02:21
вотоноче