![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите !!!!! В процедуре 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