![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как определить существует ли объект [D7, XP]
malyar © (2007-08-18 14:44:00)всем привет
народ подскажите почему приведённый ниже код
при любом числовом значении переменной data сообщает
что объект найден даже если не создано ни одной коопии
TSimpleClient ?
type
TSimpleClient = class(TObject)
...
....
....
end;
//----------------------------------------------
var
dest:integer;
data:string;
ts:tsimpleclient;
begin
dest:=strtoint(data);
ts:= tsimpleclient(dest);
if assigned (ts) then
memo1.Lines.Insert(0,'naiden')
else
memo1.Lines.Insert(0,'ne naiden');
Leonid Troyanovsky (2007-08-19 20:33:00) [1]
> DrPass © (19.08.07 20:09) [18]
> Насколько я понимаю, клиент у него использует указатель
> исключительно как хендл. А вся эта катавасия с Assigned
> затеяна для того, чтобы сервер мог проверять валидность
> передаваемых ему хендлов
Фантазер.
--
Regards, LVT.
DrPass (2007-08-19 20:12:00) [2]
> malyar (19.08.07 18:58) [15]
> если применить массив без удаления не нужных элементов то
> нумерация менятся не будет и индексы будут верны
А фантазия программисту зачем дадена? Устанавливай ненужные элементы в nil, а не удаляй. При создании новых объектов переиспользуй. И расти без необходимости не будет, и перенумерация не потребуется
DrPass (2007-08-19 20:09:00) [3]
> Юрий Зотов © (19.08.07 19:18) [17]
Насколько я понимаю, клиент у него использует указатель исключительно как хендл. А вся эта катавасия с Assigned затеяна для того, чтобы сервер мог проверять валидность передаваемых ему хендлов
Юрий Зотов (2007-08-19 19:18:00) [4]> malyar (19.08.07 18:01) [11]
Если клиент и сервер работают в разных адресных пространствах, то толку от всего этого пинг-понга указателями будет ровно ноль.
А если в общем, то см. TObjectList.
Leonid Troyanovsky (2007-08-19 19:07:00) [5]
> malyar (19.08.07 18:58) [15]
RTFM.
--
Regards, LVT.
malyar (2007-08-19 18:58:00) [6]to drpass
если применить массив без удаления не нужных элементов то нумерация менятся не будет и индексы будут верны ,
но такой массив неизбежно будет расти в размере.
если удалять не нужные итемы то придется сообщать клиентам
о изменении индэксации элэментов что совсем не гуд.
можно конечно просто перед каждым обращением к объекту пройтись по всему массиву и посмотреть есть ли там нужная запись ,
но это доп нагрузка на сервер что тоже не гуд
DrPass (2007-08-19 18:11:00) [7]
> серверу нужно проверить существует ли объект с указателем
> который он получил от клиента
Куда разумнее хранить объекты в массиве, и передавать клиенту индексы этих объектов.
MetalFan (2007-08-19 18:05:00) [8]
> получается что при использовании опасного приведения типов
> от
> функции assigned толку мало так как
> if assigned (Tmy(12345)) then всегда верно
а что ты хотел от этой функции? она лишь проверяет, присвоено ли указателю значение отличное от nil или нет.
с небольшой эффективностью можно попробовать применить функции из разряда IsBad(Read/Write/Code/String)Ptr
Германн (2007-08-19 18:05:00) [9]Мой телепатор работает правильно :-)
malyar (2007-08-19 18:01:00) [10]получается что при использовании опасного приведения типов от
функции assigned толку мало так как
if assigned (Tmy(12345)) then всегда верно
как тогда можно узнать был ли создан объект или нет если для хранения
указателя используется переменная типа интегер
теперь отвечу на кой зто надо.
приложение клиент сервер .
на стороне сервера созданы объекты указатели на которые были переданы
клиенту и клиент решает с каким обектом работать серверу. для этого он передает указатель нужного объекта серверу ,
а серверу нужно проверить существует ли объект с указателем который он получил от клиента
Virgo_Style (2007-08-19 13:10:00) [11]Anatoly Podgoretsky © (19.08.07 12:49) [9]
так мне и годиков поменьше будет
Anatoly Podgoretsky (2007-08-19 12:49:00) [12]Ты оптимист
Virgo_Style (2007-08-19 10:53:00) [13]Германн © (19.08.07 1:01) [6]
Я сейчас не в Москве... хотя климат примерно тот же)
Сдается мне, автор хочет именно обращаться к simpleclient'ам по имени или индексу... А то придется предположить, что он осознанно приводит integer к tsimpleclient... я еще не до такой степени разуверился в человечестве :-D
Плохиш (2007-08-19 01:02:00) [14]
> Юрий Зотов © (18.08.07 19:02) [2]
> Боже...
Так вот почему в мире столько проблем...
Германн (2007-08-19 01:01:00) [15]
> Virgo_Style © (18.08.07 22:05) [5]
"Телепатор", да ещё в таких климатических условиях, как сейчас в Москве, лучше не включать! :-)
Ведь в вопросе звучит
> даже если не создано ни одной коопии
> TSimpleClient
Имхо, DrPass © (18.08.07 20:17) [4] скорее всего прав.
Но внутренне согласен с Юрием Зотовым. (Хотя "внешне", в подобных вопросах, стараюсь придерживаться принципов Михаила Самуэлевича :).
Virgo_Style (2007-08-18 22:05:00) [16]
> ts:= tsimpleclient(dest);
*включая телепатор* ты думаешь, чтоtsimpleclient(1)- это то же самое, чтоsimpleclient1? Не угадал...
DrPass (2007-08-18 20:17:00) [17]
> Шо за бред? Мож кто объяснит что делает этот код? Нифига
> не понял...
Ничего особенного. Афтар просто пытается постичь алгоритм работы функции Assigned
Dimaxx (2007-08-18 19:29:00) [18]
> var
> dest:integer;
> data:string;
> ts:tsimpleclient;
> begin
>
> dest:=strtoint(data);
> ts:= tsimpleclient(dest);
> if assigned (ts) then
> memo1.Lines.Insert(0,'naiden')
> else
> memo1.Lines.Insert(0,'ne naiden');
Шо за бред? Мож кто объяснит что делает этот код? Нифига не понял...
Юрий Зотов (2007-08-18 19:02:00) [19]Боже...
Leonid Troyanovsky (2007-08-18 14:55:00) [20]
> malyar (18.08.07 14:44)
> при любом числовом значении переменной data сообщает
> что объект найден даже если не создано ни одной коопии
Дык, назначай 0 и будет не найден.
--
Regards, LVT.