indy做聊天系统,用线程时时取得服务器信息的问题~~
他说这个程序能不断的接收服务器传来的消息,可他就在client组件connected事件里创建了一下线程,运行完自动就关闭了,如何能一直接收消息呢?
这个是接收消息的线程
procedure TMainThread.Foo;
var
Msg:string;
bool: boolean;
begin
bool:=true;
while bool do begin
try
Msg:= Form6.IdTCPClient1.IOHandler.ReadLn;
if(Msg='') then
bool:=false
else
begin
M_Lock.Enter;
M_MsgList.Add(Msg);
M_Lock.Leave;
end;
except
bool:=false;
end;
end;
end;
Procedure TMainThread.Execute;//线程启动
begin
FreeOnTerminate:=True;
Foo;
End;
End.
procedure TForm6.ConetClick(Sender: TObject);
begin
try
if not (IdTCPClient1.Connected) then
begin
IdTCPClient1.Connect;
TMainThread.Create(false);
IdTCPClient1.IOHandler.writeln('lianjie');
ShowMessage('连接成功');
end;
except
ShowMessage('连接失败');
end;
end;
procedure TForm6.Timer1Timer(Sender: TObject);
var
Msg:String;
begin
M_Lock.Enter;
while M_MsgList.Count > 0 do
begin
Msg:='';
Msg := M_MsgList[0];
M_MsgList.Delete(0);
if(Msg<>'')then
Memo1.Lines.Add(Msg);
end;
M_Lock.Leave;
end;