Форум: "Основная";
Текущий архив: 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.009 c