Главная страница
    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.45 MB
Время: 0.007 c
1-75249
DimaLos
2003-12-10 14:33
2003.12.23
Как добавить разрыв страницы в Excel из Delphi?


7-75410
SergShh
2003-10-19 17:25
2003.12.23
Как насильно сменить язык на русский???


9-75068
Кен
2003-06-03 03:45
2003.12.23
К GLScene прикрутили bsp и md3. Как теперь между ними проверять и


7-75413
Санёк
2003-10-19 16:53
2003.12.23
Помогите плиз


14-75401
Данёк
2003-11-27 10:55
2003.12.23
Мой сайток





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