Holaaa Jachguate, gracias por responder, el problema bueno no es solo cuando está conectado a internet, solo que se hace más notorio, en realidad en una red LAN también sucede lo mismo pero como la velocidad de transmisión es mucho más rápida que una conexión dial-up, no se nota tanto. Aqui está un poco del código fuente, haber si puedes identificar que estoy haciendo mal:
Este es el hilo que se encarga de recibir las imágenes:
Código:
unit UReciveImagenes;
interface
uses
Classes, Jpeg, UPrincipal, SysUtils;
type
TRecibirImagenes = class(TThread)
private
{ Private declarations }
protected
procedure CapturarImagenes;
procedure Execute; override;
end;
implementation
uses
UControlCliente;
procedure TRecibirImagenes.CapturarImagenes;
var
stream: TStream;
jp: TJPEGImage;
conectado : boolean;
mensaje : string;
EnviarInformacion : TDatosUsuario; //En UControlCliente
begin
.
.
.
Cliente.WriteBuffer(EnviarInformacion, sizeof(EnviarInformacion));
while Cliente.connected do
Cliente.ReadStream(Stream, -1, True);
.
.
.
end;
{ Place thread code here }
procedure TRecibirImagenes.Execute;
begin
Synchronize(CapturarImagenes);
Terminate;
end;
end.
--------------------------------------------------------------
Este es el código de la unidad donde se crea el hilo con un timer:
Código:
unit UControlCliente;
interface
type
TControlCliente = class(TDataModule)
Timer1: TTimer;
Cliente: TIdTCPClient;
.
.
.
Public
procedure CrearHilo;
end;
var
ControlCliente: TControlCliente;
RecibirImagenes : TRecibirImagenes;
implementation
.
.
.
procedure TControlCliente.Timer1Timer(Sender: TObject);
begin
CrearHilo;
end;
procedure TControlCliente.CrearHilo;
begin
RecibirImagenes := TRecibirImagenes.Create(TRUE);
RecibirImagenes.Priority := tpNormal;
RecibirImagenes.Resume;
RecibirImagenes.WaitFor;
end;
.
.
.
end;
-------------------------------------------------------
Y desde la forma principal llamo activo el timer:
Código:
procedure TFPrincipal.Conectar1Click(Sender: TObject);
begin
.
.
.
ControlCliente.Timer1.Enabled := TRUE;
end;
---------------------------------------------------------
Bueno hasta aqui funcionaria bien pero tengo otros botones que me mueven una cámara y cuando los apreto se paraliza el programa por un instante mientras el código del timer se ejecuta, por ejemplo el timer se acvita cada 1 segundo entonces los botones se pueden apretar aproximadamente cada segundo, me parece que esta linea de código hace que todo el programa no responda:
while Cliente.connected do
Cliente.ReadStream(Stream, -1, True);
Lo más extraño es que sin hilo el comportamiento es el mismo, realmente los hilos no mejoran en nada su desempeño.
--------------------------------------------------------------
Esta es la unidad que envia información al servidor para que mueva la cámara:
Muchas gracias.
JDNA.