Просмотр полной версии : Нубовопрос про tlist :)
Господа 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;
mira, TList это просто список, ничего кроме хранения указателей он не делает. Для хранения объектов имхо удобнее TObjectList, ему при создании можно указать вызывать ли Free для удаляющихся элементов.
Значит 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); //тихо присвоит
Значит titem не обязан вообще быть обьектом (классом)?эм, что ещё за TItem?
Все спс сделал как хотел =)
Шота я не понял фастмм (альтернативный мм-манагер) по дефолту чтоле непотокобезопасный?
в приложении при непанятных обстоятельствах возникают какието странные ошибки и приложение падает в различных местах без вывода ошибок зачастую. Сделал трассировочные переменные и опа - фейл на s:='npc/'+name+'/'+charname или какомнеть strnew.
Добавлено через 3 минуты
В проге могут выделять/освобождать память аж 3 нити.
Такая картина будто мм иной момент пытаетса выдать одну и туже память двум нитям разом и разваливаетса 'карта кучи' программы.
GoodDrone
15.08.2011, 16:28
Шота я не понял фастмм (альтернативный мм-манагер) по дефолту чтоле непотокобезопасный?
Поток надо стартовать System.BeginThread, либо руками выставить System.IsMultiThread := True.
Ну ппц год не могу вычислить откуда берутса исключения einvalidpointer или раз в неделю в строку мусор попадает.
скоко свое время про делфа читал и про мультитреды нигде не упомянуто про мм.
Поток надо стартовать 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 выставить.
Фастмму вроде пофиг на эту переменную у него там своя какаято (это я про навесной фасстмм для д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'
Хакир!
чорт сфейлилса. мне теперь незахватить мир
Расскажите в чем причина использования альтернативного менеджера памяти в Delphi типа fastmm? Неужели со свтроенным так все плохо? Какой прирост производительности можно получить?
Yegor, поправочка, со встроенным было всё плохо, начиная с версии 200? (точно номер не помню) fastmm встроен по умолчанию, не знаю правда с какими настройками и насколько полностью встроен
Ели я использую Delphi 7 то есть смысл использовать fastmm?
Ели я использую Delphi 7 то есть смысл использовать fastmm?
скорость аллокаций памяти заметно растет и снижаетса фрагментация. это круто. правда за это небольшая расплата, фастмм резервирует больше памяти и многое оптимизирует за счет избыточности.
для большинства случаев эта плата незначительна.
еще возник вопрос к бронтозаврам VCL-а. решил поправить редактор БДшки. есть скажем кнопка "добавить запись в БД". хочу чтоб выкатилось какоенить окошко с полями ввода, указать параметрый создаваемой записи - нажать ОК и готово. но вот проблема - та форма будет в другом юните и ей будут недоступны переменные основоного. среди стандартных никаких шаблонов нет =(
ватафака))))
делаю билдер синтаскических выражений, руский язык всеже хуже ассемблера
вот фраза "вася дай патроны" билдитса как
лицо : вася (имя)
запрос : дать (глагол)
объект : патрон (сущ мн. число)
а фраза "дайте соски"
лицо : соски (сущ мн число)
запрос : дать (глагол)
и как ему объяснить нужно мне дать сосок или я прошу "сосок" "дать"
делай еще одну функцию, которая бы определяла лицо это лицо или объект.
ну ладно этим можно пречебреч, пусть отвечает "соски не могут вам дать прямо сейчас". теперь думаю по каким правилам привязывать прилагательные к тому или иному объекту. открыл курс руссково языка я офигел от числа правил определений и исключений. как тока этому гамну меня еще пытались учить в 5 классе.
кароче ищу училку по русскому языку, можно в очках. оплата гарантируетса.
не знаю я насчет интеллектов всяких искусственных - полагаю тут нужна таблица, причем для каждого случая разное количество столбиков. поясняю:
сначала определяется количество сосок. 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 то сосок, сосок, могут, выданы
ты непонял с разбором вроде все норм. проблема всю эту конструкцию собрать в единый граф.
а мы сейчас о чем? о построении ответов на вопросы, или пока еще о разборе предложений?
ну какбе у меня рекурсивный разбор предложения, тоесть слова все определяютса в простых предложениях прально.
типа там глагол/сущ какова рода какова склонения и падежа.
щас задача слинковать это к виду типа:
"дядя вася быстро побежал на площадку"
>объект = вася [атрибуты = дядя]
>действие = бежать [атрибуты=быстро]
>субъект = площадка [атрибуты=NULL]
"дай больших соленых семечек дорогой"
>объект = default [атрибуты = дорогой]
>действие = дать [атрибуты = NULL]
>субьект = семечко [атрибуты = соленый, большой]
потом все это дело сбилдить в опкоды а дальше пока тайна ;)
ой смотри... потом твоя скайнет пентагон взломает и устроит апокалипсис... я даже знаю что ты программу свою в декабре следующего года закончишь.
кстати! как ты предусмотришь разбор предложения, если одно-два слова написаны с ошибками, и допустим проблема с запятыми? :) у меня была мысль прикрутить в этом плане гугл - точней, там когда вбиваешь запрос с ошибкой, он тебя не назойливо поправляет: возможно вы имели ввиду бла бла бла? но дальше теории дело не пошло...
если я буду еще анализировать орфографию это точно будет до декабря :) задача пока понимать смысл простых предложений с определенной погрешностью.
старый проект закрыл только иза того что все поставленые задачи и цели достигнуты и получена отменная стабильность ;)
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot