Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.05.2009, 18:28
dEEmS dEEmS вне форума
Прохожий
 
Регистрация: 12.05.2009
Сообщения: 3
Репутация: 10
По умолчанию TmemoryStrea​m и ClientSocket

Вобщем такая проблема:
Не очищается память методом Free. Выплевывает ошибку. Код примерно такой:
Код:
MyJpeg.Assign(bmp1);
myjpeg.CompressionQuality:=90;
myjpeg.Compress; 

pict:=Tmemorystream.Create;
pict.Position:=0;
myjpeg.SaveToStream(pict) ;
pict.Position:=0; 

ClientSocket1.Socket.SendText('Size:'+inttostr(pict.Size)+#0);
//если поставить pict.free сюда, то выполнится нормально.
ClientSocket1.Socket.SendStream(pict); //тут отправляется все ок.
pict.free; //а вот тут уже не срабатывает
Причем замечено, что до SendStream поток имеет нормальный размер (числом). А после выполнения SendStream, pict.size уже равен "Access violation at 0009272D1F accessing 00180094".

Код:
if ClientSocket1.Socket.SendStream(pict) then
pict.Free
не помогает

Это все дело в цикле, так что если не делать Free, то программа съедает всю оперативу до конца.

Так вот что же происходит с потоком после выполнения метода Socket.SendStream?? Заранее спс
Ответить с цитированием
  #2  
Старый 12.05.2009, 18:43
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

А справку читать Пушкин будет? Ну как дети, чесное слово.
Цитата:
Writes all the information that can be read from the AStream parameter to the socket connection.

Delphi syntax:

Код:
function SendStream(AStream: TStream): Boolean;

C++ syntax:

Код:
bool __fastcall SendStream(Classes::TStream* AStream);

Description

Use SendStream to write to the socket connection. The writing may occur in the OnSocketEvent event handler of a Windows socket object or in the OnWrite or OnClientWrite event handler of a socket component. Alternately, SendStream may write from a socket that is expected to write to the connection without a notification to signal the connection’s readiness to read. SendStream reads information from the stream indicated by AStream and writes it to the socket connection. The value returned by SendStream indicates whether any information was successfully written to the connection.

Note: The Stream passed as a parameter to SendStream becomes ”owned” by the windows socket object. The Windows socket object frees the stream when it is finished with it. Do not attempt to free the stream after it has been passed as a parameter.

ЗЫЖ Подчеркнул я, чтобы акцентировать внимание.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 12.05.2009, 21:59
dEEmS dEEmS вне форума
Прохожий
 
Регистрация: 12.05.2009
Сообщения: 3
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
The Windows socket object frees the stream when it is finished with it
Дак вот когда винда его освободит то?? Файл уже передан, пришло подтверждение о приеме, и мне бы надо передавать следующий файл этим потоком. Но как мне его создать по новой, если он не был уничтожен? Я его даже очистить то не могу.
Ответить с цитированием
  #4  
Старый 20.05.2009, 17:50
dEEmS dEEmS вне форума
Прохожий
 
Регистрация: 12.05.2009
Сообщения: 3
Репутация: 10
По умолчанию

Проблема решена. Всем спасибо
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:40.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025