Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите !!!!! В процедуре Execute не работает Memo1.Lines.Add() [D6, Win2k]


Amid ©   (2004-07-15 10:20:00) 

При выполнене процедуры Execute програма блокир., и имено где Memo1.Lines.Add(). Подскажите где ошибка !!!!    

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
Var
  c : TMemoryStream;
  s : String;
begin

  c:=TMemoryStream.Create;
  c.LoadFromFile('d:\sointer.gdb');

  with AThread.Connection do
   Begin

         s:=ReadLn;
         Memo1.Lines.Add('Server :'+s);//сдесь Блокируется ????

         If s='QWE' Then
          Begin
             WriteStream(c,true,false);
             Memo1.Lines.Add('Server <-WriteStream');
             Disconnect;
             c.Free;
          End;

   End;

end;


Th   (2004-07-15 14:59:00) [1]

надо писать процедуру такую вот:

procedure AddToMemo;
begin
Memo1.Lines.Add('Server :'+FStr);
end;

FStr делать полем класса

и в Execute писать так:

Synchronize(AddToMemo);

и так со всеми thread-незащищенными вызовами (VCL, GDI и проч..)


Sandman25   (2004-07-15 14:36:00) [2]

А мне тут больше всего нравится, что C.Free стоит в if вместо finally :)


NAlexey   (2004-07-15 14:31:00) [3]

>Amid   (15.07.04 10:20)  
Повторю специально для тебя:
Ты используешь TidThreadMgrPool или TidThreadMgrDefault?


Ozone   (2004-07-15 13:44:00) [4]

Наученый горьким опытом: "И вообще не помешала бы синхронизация с VCL-потоком, ИМХО"


tp   (2004-07-15 10:39:00) [5]

TMemoryStream.Position


Наверх

Титульная страница Поиск, карта сайта Написать письмо