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

Вниз

Граждане, такой вопрос по TMemoryStream:   Найти похожие ветки 

 
ISP   (2003-12-08 18:25) [0]

Есть кусок кода

procedure TMainForm.SendJpeg(st:string; img:TJpegImage; sfi:integer);
var sms:TMemoryStream;
begin
sms:=TMemoryStream.Create;
img.SaveToStream(sms);
sms.Position:=0;
try
ssPict.Socket.Connections[sfi].SendText(st+IntToStr(sms.Size) + #0);
ssPict.Socket.Connections[sfi].SendStream(sms);
finally
sms.Free;
end;
end;


Выдает ошибку Access violation at address 00000000. Read of address 00000000.
А когда убираю sms.Free; все Ок. Работает, но занимаемая память упорно ползет вверх при многократном обращении к процедуре. Может подскажете в чем я торможу?


 
panov   (2003-12-08 18:29) [1]


procedure TMainForm.SendJpeg(st:string; img:TJpegImage; sfi:integer);
var sms:TMemoryStream;
begin
try
sms:=TMemoryStream.Create;
except
ShowMessage("Stream not created");
Exit;
end

try
img.SaveToStream(sms);
sms.Position:=0;
ssPict.Socket.Connections[sfi].SendText(st+IntToStr(sms.Size) + #0);
ssPict.Socket.Connections[sfi].SendStream(sms);
finally
sms.Free;
end;
end;


 
Бином Ньютоныч   (2003-12-08 21:28) [2]

Сокет сам уничтожит Stream после передачи. Так что убери sms.Free.


 
panov   (2003-12-08 23:06) [3]

>Бином Ньютоныч (08.12.03 21:28) [2

А можно поподробней?
Почему сокет уничтожит поток, который к нему не имеет никакого отношения?


 
ISP   (2003-12-09 12:55) [4]

>Бином Ньютоныч (08.12.03 21:28) [2]
В том-то и дело что он не уничтожается. Процедура вызывается из трех мест в проге. Может так быть, что сокет не успевает передать поток, а к нему опять идет обращение?
А можно как-то узнать что сокет закончил высылку потока?

>panov © (08.12.03 18:29) [1]
ShowMessage ни разу не сработал, значит stream нормально креатится.
При трасинге ошибка выскакивает на Application.ProcessMessages в процедуре вызывающей SendJpeg. Как только снимаю sms.Free все чики, но память растет.


 
panov   (2003-12-09 14:50) [5]

Значит ошибка не здесь, а при работе с TJpegImage...


 
Бином Ньютоныч   (2003-12-09 17:40) [6]

ISP © (09.12.03 12:55) [4]
Если не уничтожен значит не передан. На то она и функция чтоб результат ее вызова проверять

>Может так быть, что сокет не успевает передать поток, а к нему опять идет обращение?

В асинхронном режиме - запросто. Да ты глянь в исходники-то



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

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

Наверх





Память: 0.46 MB
Время: 0.008 c
9-75069
X-RayMan
2003-06-01 20:03
2003.12.23
Перспектива...


3-75113
Yan
2003-11-28 14:18
2003.12.23
Быстрая вставка записей


1-75211
Igit
2003-12-03 12:09
2003.12.23
Постоянно сжирает память


1-75253
killer
2003-12-10 13:57
2003.12.23
Как зарегистрировать свою программу в Windows?


4-75445
Mielofon
2003-10-24 19:16
2003.12.23
Как поменять ресурсы прямо в exe-файле.





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