Главная страница
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.014 c
11-75136
Gandalf
2003-04-10 15:42
2003.12.23
Всяк сюда входящий...


7-75423
Eagle Owl
2003-10-15 19:00
2003.12.23
Service Application


1-75252
Biji
2003-12-10 14:30
2003.12.23
Обновление окна программы


14-75315
Goida
2003-12-01 09:48
2003.12.23
Непонятная формула: d = 79^-1 mod 32220 = 1019


3-75116
ja
2003-11-28 17:58
2003.12.23
Синхронизация пары DBLookupComboBox ов на одном DataSource е