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

Вниз

Про указатели   Найти похожие ветки 

 
Alex_KV   (2006-10-16 19:46) [0]

Здравствуйте!
У меня возникла путаница.
Пусть есть процедура в которой есть лок. переменная list : TList.
Вызываем конструктор. Теперь переменная указывает на объект класса TList. Причем сама перем. находиться в стеке, а объект в куче.
Теперь мне надо передать ссылку на этот объект в др. поток.
Делаю PostMessage(..., ..., Integer(list), 0).
А вот теперь уже непонятно, что я передаю - ссылку на объект или адрес переменной?
После выполнения процедуры все лок. переменные явл. мусором и могут указывать куда угодно. Соответсвенно, в др. потоке, в кот пришло сообщение может получить неправ. указатель на объект.
Как тогда правильно поступать?
И еще. Если я сразу после PostMessage присваива. лок. перемю list := nil, то при обработке сообщения вываливается ошибка о неправ. указателе. Это мне кажется имеет тот же характер.
Так как же правильно передавать указатели на объекты?


 
Ketmar ©   (2006-10-16 19:50) [1]

код давай.

Integer(list) -- это ссылка на экземпляр, да.

>И еще. Если я сразу после PostMessage присваива. лок.
>перемю list := nil, то при обработке сообщения
>вываливается ошибка о неправ. указателе.
17-я строка.


 
Loginov Dmitry ©   (2006-10-16 19:56) [2]

Alex_KV   (16.10.06 19:46)
Если я сразу после PostMessage присваива. лок. перемю list := nil, то при обработке сообщения вываливается ошибка о неправ. указателе


1. А зачем выполняешь обнуление?

2. Другой поток - это основной поток того же процесса или что это?


 
Alex_KV   (2006-10-17 10:16) [3]

To Loginov Dmitry
1. Обнуление это случайно затесалось, из-за него и возник вопрос и поэтому захотелось разобраться. Вроде это безобидно должно быть.
В PostMessage в Integer(list) передается значение лок. переменной, хранящееся в стеке.  Это значение - адрес объекта.
Если я это значение выслал, а потом обнулил, то в в чем проблема?
Почему ошибка?
Что на самом деле высылается и как высылать правильно?
У меня как я уже писал есть подозрение, что ошибка возникнет и без обнуления в том случае если к моменту начала обработки сообщения процедура выславшая сообщение уже закончится и лок. переменные выйдут из зоны видимости и будут недействительны.

2. др. поток  - основной поток того же процесса


 
Сергей М. ©   (2006-10-17 10:27) [4]


> Alex_KV   (17.10.06 10:16) [3]


Если объект реально существует, то ссылаться на него можно где угодно и как угодно.

Ссылок на объект м.б. и ни одной и великое множество - от этого объект не перестает быть "живым".


 
DrPass ©   (2006-10-17 10:32) [5]


> В PostMessage в Integer(list) передается значение лок. переменной,
>  хранящееся в стеке.  Это значение - адрес объекта.
> Если я это значение выслал, а потом обнулил, то в в чем
> проблема?

Так и есть. Если ты не вызвал деструктор объекта, его адрес остается действительным, и все должно работать (хоть сама по себе такая архитектура "создать в одном потоке, убить фиг-знает-где" является довольно кривой). Ошибка в другом месте.


 
Сергей М. ©   (2006-10-17 10:38) [6]


> Если я сразу после PostMessage присваива. лок. перемю list
> := nil


..то ты просто присваиваешь ей nil.
На состоянии самого объекта это никак не отразится.


> при обработке сообщения вываливается ошибка о неправ. указателе


В дан.случае это никак не связано с присвоением локальной переменной значения nil.

Вот если бы эта лок.переменная хранила ссылку на интерфейс, тогда - да, тогда тебя поджидает засада.



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

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

Наверх





Память: 0.46 MB
Время: 0.917 c
6-1149414809
Yegorchic
2006-06-04 13:53
2006.10.29
IdFTP.List()


2-1160838431
Steep
2006-10-14 19:07
2006.10.29
Рисование


15-1160372999
boriskb
2006-10-09 09:49
2006.10.29
У кого родственники, знакомые плавают?


15-1160113168
Pazitron_Brain
2006-10-06 09:39
2006.10.29
Аномальные проблемы с компьютером


8-1143445304
zxcv
2006-03-27 11:41
2006.10.29
Chart 3D





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский