Ver Mensaje Individual
  #1  
Antiguo 23-11-2013
n03l n03l is offline
Miembro
 
Registrado: feb 2007
Posts: 73
Reputación: 18
n03l Va por buen camino
Optimizar codigo

Saludos, tengo un pequeño codigo que recorre una tabla y va enviando comandos a un dispositivo USB a traves del componente TComport.... el codigo que tengo me funsiona bien, ya que cada vez que envio un comando al disposivo USB hago una pausa de 10seg para esperar la respuesta del dispositivo.

el problema esque el tiempo de respuesta es variado es decir podria devolver la respuesta en 3eg o en 7seg y la manera como yo lo hago estoy perdiendo tiempo ya q espero 10seg para asegurar la respuesta q debo almacenar en una tabla

el codigo que uso es el siguiente
Código Delphi [-]
for I := 0 to FrmPrincipal.Tabla.RecordCount - 1 do
begin
       FrmPrincipal.ComPort.WriteStr('ENVIO EL COMANDO A DISPOSITIVO USB');
        Sleep(10000); // hago una pausa para esperar la respuesta del dispositivo
         Application.ProcessMessages;
   
        if FrmPrincipal.resp='ERROR' then
      begin
        FrmPrincipal.Tabla.Edit;
        FrmPrincipal.Tabla.FieldByName('ESTADO').AsString:='ERROR';
        FrmPrincipal.Tabla.Post;
        
      end //fin resp error
      else
      if FrmPrincipal.resp='OK' then
      begin
        FrmPrincipal.Tabla.Edit;
        FrmPrincipal.Tabla.FieldByName('ESTADO').AsString:='EXITO';
        FrmPrincipal.Tabla.Post;
       
      end; //fin resp ok

FrmPrincipal.Tabla.Next;
end;


Tambien e tratado de agregarle un while para de esta manera avanzar cuando se obtenga una respuesta pero no camina de esa forma

Código Delphi [-]
FrmPrincipal.resp:='';
for I := 0 to FrmPrincipal.Tabla.RecordCount - 1 do
begin
       FrmPrincipal.ComPort.WriteStr('ENVIO EL COMANDO A DISPOSITIVO USB');
    //    Sleep(10000); // hago una pausa para esperar la respuesta del dispositivo
         Application.ProcessMessages;
     while (FrmPrincipal.resp<>'') do
begin    
        if FrmPrincipal.resp='ERROR' then
      begin
        FrmPrincipal.Tabla.Edit;
        FrmPrincipal.Tabla.FieldByName('ESTADO').AsString:='ERROR';
        FrmPrincipal.Tabla.Post;
        
      end //fin resp error
      else
      if FrmPrincipal.resp='OK' then
      begin
        FrmPrincipal.Tabla.Edit;
        FrmPrincipal.Tabla.FieldByName('ESTADO').AsString:='EXITO';
        FrmPrincipal.Tabla.Post;
       
      end; //fin resp ok
end;//fin de while

FrmPrincipal.Tabla.Next;
end;

aver si alguien me echa una manito para optimizar este codigo. saludos
Responder Con Cita