Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.23;
Скачать: CL | DM;

Вниз

Граждане, такой вопрос по 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
14-75311
Зевякин Сергей
2003-11-28 11:21
2003.12.23
Все в кладовку зырить прогу


14-75334
Undert
2003-11-30 21:40
2003.12.23
Заполнение


1-75212
Walrus
2003-12-11 09:01
2003.12.23
Картинки в TStringGrid


1-75178
Silver_
2003-12-10 14:56
2003.12.23
Screen.Forms - может кто поправит, если не прав?


9-75072
demo2
2003-05-25 01:25
2003.12.23
I want 3d example in..