Вниз
Скачать: CL | DM;

Определить, уничтожен ли объект   Найти похожие ветки 

 
anbezr   (2003-06-23 18:43) [0]

привет
объект (TFileStream) создается внутри функции и ссылка на него передается в винду. винда может удалить объект, а может и не удальть в случае ошибок, обрывов связи и т.д. могу ли я как нибудь, сохраняя указатель на объект, опрделить уничтожен ли он?
спасибо


 
MBo ©   (2003-06-23 18:46) [1]

> ссылка на него передается в винду
>винда может удалить объект
????


 
Palladin ©   (2003-06-23 18:53) [2]

да, винда она такая, даешь ей объекты даешь, а она их без спросу и разбору...


 
Переяслов Григорий ©   (2003-06-23 18:54) [3]

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


 
anbezr   (2003-06-23 18:55) [4]

речь идет о TServerSocket
The Stream passed as a parameter to SendStream becomes “owned” by the windows socket object. The Windows socket object frees the stream when it is finished with it. Do not attempt to free the stream after it has been passed as a parameter.
но, замечено, что при разрыве связи или возникновении ошибки поток не всегда удаляется.


 
Palladin ©   (2003-06-23 18:57) [5]

как ты заметил интересно


 
reonid ©   (2003-06-23 18:57) [6]

Я что-то не помню ВинАпишных функций, требующих
в качестве аргумента дельфёвый TStream.

Если ты передаёшь его Винде, как указатель,
то Винда врядли сможет его удалить -
она просто не знает, как это делается.


 
anbezr   (2003-06-23 19:03) [7]

2 Palladin © (23.06.03 18:57)
я сейчас говорю о TMemoryStream, но если сделать TFileStream, то при возникновении ошибки, не получается открыть файл, который отправлял. если ошибку не создавать, то все нормально.


 
Юрий Федоров ©   (2003-06-23 19:08) [8]

>>anbezr (23.06.03 19:03)
Посмотри на код VCL этого метода.
Если не ошибаюсь, он разрушается всегда.


 
anbezr   (2003-06-23 19:15) [9]

2 Юрий Федоров © (23.06.03 19:08)
да, вроде всегда, но факт остается фактом.


 
Юрий Федоров ©   (2003-06-23 19:17) [10]

А с чего взял, что он не разрушается?


 
anbezr   (2003-06-23 19:22) [11]

т.к. файл не получается открыть


 
Юрий Федоров ©   (2003-06-23 19:26) [12]

Думаю, он разрушается позднее.
Проверь - если разрушить сам сокет, разрушится поток или нет


 
anbezr   (2003-06-23 19:29) [13]

if not Socket.SendStream(MemStr) then
begin
ErrorCode := WSAGetLastError;
while ErrorCode = WSAEWOULDBLOCK do
begin
Socket.SendStream(MemStr);
ErrorCode := WSAGetLastError;
end;
end;


 
anbezr   (2003-06-23 19:39) [14]

anbezr (23.06.03 19:29)
упрощается до
if not Socket.SendStream(MemStr) then
Socket.Close;
спасибо!



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.013 c
1-31237
region
2003-06-29 15:34
2003.07.10
List index out of bounds ...


14-31403
sapsi
2003-06-18 08:55
2003.07.10
---|Ветка была без названия|---


14-31457
b_baranov
2003-06-24 00:02
2003.07.10
Как


7-31538
_ALEXey_
2003-04-22 08:11
2003.07.10
Установка системного времени


3-31073
LittleGirly
2003-06-16 10:22
2003.07.10
Конфигурирование BDE




   Наверх