Novás
06-05-2004, 22:04:42
Hola a todos...
Estos días he estado mirándo el código fuente de un programa de chat que he encontrado al mirar los ejemplos de las indy y me he encontrado con un pequeño problemilla.
Cuando el programa cliente ejecuta el temporizador para descargar los mensajes del chat (IdTCPClient1.ReadLn('', 5);) éste se queda colgado hasta
que encuentra un mensaje y no me deja hacer nada.
procedure TForm1.Timer1Timer(Sender: TObject);
var
Com, Msg : String;
begin
if not IdTcpClient1.Connected then
exit;
Msg := IdTCPClient1.ReadLn('', 5);
if Msg<>'' then
begin
if Msg[1] <> '@' then
begin
{ Not a system command }
memLines.Lines.Add(Msg);
end
else
begin
{ System command }
Com := UpperCase(Trim(Copy(Msg, 2, Pos(':', Msg) -2)));
Msg := UpperCase(Trim(Copy(Msg, Pos(':', Msg) +1, Length(Msg))));
if Com = 'CLIENTS' then
lbClients.Items.CommaText := Msg;
end;
end;
end;
Este es el fragmento de código que me da problemas. El temporizador se ejecuta cada medio segundo
Estos días he estado mirándo el código fuente de un programa de chat que he encontrado al mirar los ejemplos de las indy y me he encontrado con un pequeño problemilla.
Cuando el programa cliente ejecuta el temporizador para descargar los mensajes del chat (IdTCPClient1.ReadLn('', 5);) éste se queda colgado hasta
que encuentra un mensaje y no me deja hacer nada.
procedure TForm1.Timer1Timer(Sender: TObject);
var
Com, Msg : String;
begin
if not IdTcpClient1.Connected then
exit;
Msg := IdTCPClient1.ReadLn('', 5);
if Msg<>'' then
begin
if Msg[1] <> '@' then
begin
{ Not a system command }
memLines.Lines.Add(Msg);
end
else
begin
{ System command }
Com := UpperCase(Trim(Copy(Msg, 2, Pos(':', Msg) -2)));
Msg := UpperCase(Trim(Copy(Msg, Pos(':', Msg) +1, Length(Msg))));
if Com = 'CLIENTS' then
lbClients.Items.CommaText := Msg;
end;
end;
end;
Este es el fragmento de código que me da problemas. El temporizador se ejecuta cada medio segundo