Форум: "Потрепаться";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
ВнизОпределить, уничтожен ли объект Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c