Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.10;
Скачать: 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 вся ветка

Текущий архив: 2003.07.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
1-31220
jack128
2003-06-29 00:36
2003.07.10
MDI интерфейс


14-31503
Maxim Pshevlotsky
2003-06-24 06:00
2003.07.10
MacroAssembler6.1 не компилирует asm файлы в WinXP


3-31120
Kile
2003-06-17 15:28
2003.07.10
Interbase тригеры в Delphi


3-31097
Sirus
2003-06-17 08:00
2003.07.10
При работе диск фрагментируется...


14-31425
yu-roman
2003-06-22 03:23
2003.07.10
как сделать инсталяционный файл