Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-11-2012
mosco mosco is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 20
Poder: 0
mosco Va por buen camino
Se para al activarse el salvapantallas

El programa se ejecuta perfectamente hasta que salta el salvapantallas de windows (3 minutos). El programa se sale de un bucle repeat...until que en principio no se tendria que salir hasta haber pulsado un TButton. El bucle lo tengo protegido con un try...except..end

¿Como se puede solucionar?


Gracias y saludos a todos.
Responder Con Cita
  #2  
Antiguo 11-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿El programa?, ¿qué programa?, deberías explicar las cosas claramente, ya que no podemos adivinar
Responder Con Cita
  #3  
Antiguo 11-11-2012
mosco mosco is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 20
Poder: 0
mosco Va por buen camino
Discupe Casimiro, por mi falta de detalles, bajo mi ignorancia pensé que no hacia falta ser más explícito. A continuación pongo el bucle que comenté arriba. Es el bucle del que se sale cuando salta el salvapantallas de windows. Espero que alguien me pueda ayudar.

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
  begin
    Button1.Enabled:=False;
    Button2.Enabled:=False;
    try
      repeat
        Application.ProcessMessages;
        Memo1.Clear;
        BorraBuffer;
        EnviaDatos('....');
        RecibeDatos;
        if DatosConConexion = 0 then break;
        Memo1.Font.Size:= 300;
        Memo1.Lines.Text := IntToStr(FuerzaSenial);
        sleep(500);
      until (Button3.Tag = 1) or (Button4.Tag = 1);
      Memo1.Clear;
      Memo1.Font.Size:= 10;
      Button1.Enabled:=True;
      Button2.Enabled:=True; 
      Button3.Tag:= 0;
      Button4.Tag:= 0;
    except
    end;
  end;

Gracias
Responder Con Cita
  #4  
Antiguo 11-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Sigues sin explicar las cosas claramente, ese 'EnviarDatos' y similares ¿a dónde se conecta?, porque lo que ocurre es que el salvapantallas también "pone a dormir" el puerto/canal/cable/conexión/etc. que usas para ese proceso que haces. Deberías decirle al sistema para que no lo ponga a domir
Responder Con Cita
  #5  
Antiguo 11-11-2012
mosco mosco is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 20
Poder: 0
mosco Va por buen camino
Exacto Casimiro, son dos tuberias (pipes) que creo para comunicarme con un servidor (router) y los procesos de enviar y recibir son los siguientes:

Código Delphi [-]
procedure EnviaDatos(Cadena: string);
var
  i: integer;
  begin
    for i:= 1 to length(Cadena) do
      begin
        buf[i-1]:= Cadena[i];
        buf[length(Cadena)]:= #13; // Añadimos "intro" para que el comando se introduzca
      end;  
    WriteFile(write_stdin,
              buf,
              length(Cadena)+1,
              bread,
              Nil);
  end;

procedure RecibeDatos;
  Begin
    BorraBuffer;
    sleep(100);
    PeekNamedPipe(read_stdout,@buf,BUFFERSIZE-1,@bread,@avail,NiL);
    // Chequear si hay datos para leer en stdout
    if (avail <> 0) then
      Begin
        ReadFile(read_stdout,
                 buf,
                 BUFFERSIZE,
                 bread,
                 Nil);
        FuerzaSenial:= StrToInt(buf[bread-20] + buf[bread-19]);
        DatosConConexion:= 1;
      end
    else
      begin
        DatosConConexion:= 0;
        showmessage('No hay conexion establecida');
      end
  end;

Se crean las dos pipes para enviar y recibir datos y las mantengo abiertas hasta que salgo del programa. Cuando salgo cierro todos los handles.
Puedo poner el codigo completo de las dos unidades que componen el programa pero me parece un poco extenso.
Responder Con Cita
  #6  
Antiguo 12-11-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
mosco,

Cita:
Empezado por mosco Ver Mensaje
El programa se ejecuta perfectamente hasta que salta el salvapantallas de windows (3 minutos).
Dudas:

1- ¿La falla se presenta con cualquier opción de Protector de Pantalla de forma automática y manual independientemente del lapso de tiempo?

2- ¿Haz probado comentar de manera selectiva (De lo general a lo específico) el código dentro del Repeat-Until para tratar de aislar la falla?

3- ¿Haz probado el programa en otro Computador con igual y diferente Sistema Operativo Windows?

4- ¿Haz probado el programa en el mismo Computador en Modo Safe?

En Resumen: La idea general es tratar de aislar la falla para posteriormente encontrar su solución.

Prueba hacer este cambio:
Código Delphi [-]
   Loop := True;

   Repeat

   // Tu Código.
 
   // Permite cancelar el ciclo externamente por medio de la variable global Loop
   until Loop = False;
Espero sea útil

Nelson.
Responder Con Cita
  #7  
Antiguo 12-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mosco.

Si el problema es el protector de pantalla, otra opción es desactivarlo temporalmente y luego del proceso activarlo. (Zarko Gajic)

Por ejemplo:
Código Delphi [-]
function ActivateScreenSaver(Activate: boolean): boolean;
var
  IntActive: byte;
begin
  if Activate then
    IntActive := 1
  else
    IntActive := 0;
  Result := SystemParametersInfo(
   SPI_SETSCREENSAVEACTIVE, IntActive, nil, 0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Button1.Enabled:=False;
  Button2.Enabled:=False;
  try
    try
      ActivateScreenSave(False);
      repeat
        Application.ProcessMessages;
        Memo1.Clear;
        BorraBuffer;
        EnviaDatos('....');
        RecibeDatos;
        if DatosConConexion = 0 then break;
        Memo1.Font.Size:= 300;
        Memo1.Lines.Text := IntToStr(FuerzaSenial);
        sleep(500);
      until (Button3.Tag = 1) or (Button4.Tag = 1);
    finally
       ActivateScreenSaver(True)
    end;
    Memo1.Clear;
    Memo1.Font.Size:= 10;
    Button1.Enabled:=True;
    Button2.Enabled:=True;
    Button3.Tag:= 0;
    Button4.Tag:= 0;
  except
   ...
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 13-11-2012
mosco mosco is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 20
Poder: 0
mosco Va por buen camino
Muchas gracias señores por su ayuda. Ya lo he solucionado (hace tan solo unos minutos). Lo he solucionado simplemente colocando un Try...excep...end en el procedimiento "RecibeDatos" de la Unidad 2.
Ya no le afecta el salvapantallas. !!!Que cosas oye!!!.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Activar el salvapantallas azulin API de Windows 6 14-11-2008 13:21:03
¿crear un salvapantallas? kapullok_2006 Varios 2 16-11-2007 22:38:59
Salvapantallas más visto en USA (buenisimo) albion Humor 4 12-08-2006 01:34:15
Activar / Desactivar el salvapantallas de Windows dec Trucos 0 07-06-2006 19:24:44
Detectar el fin del salvapantallas DarKraZY API de Windows 0 22-12-2005 13:44:52


La franja horaria es GMT +2. Ahora son las 00:58:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi