Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Hilos y ExecuteAndWait (https://www.clubdelphi.com/foros/showthread.php?t=50896)

eduarcol 30-11-2007 20:08:58

Hilos y ExecuteAndWait
 
Hola a todos, estoy haciendo una aplicacion multihilos para respaldar la base de datos, para ello utilizo el procedimiento ExecuteandWait del amigo Delphi.com.ar para el que no la conozca:

Código Delphi [-]
procedure THFirebird.ExecuteAndWait( ACommand : String );
var
  StartInfo   : STARTUPINFO;
  ProccesInfo : PROCESS_INFORMATION;
  ExitCode    : Cardinal;
begin
  ZeroMemory( @StartInfo, SizeOf(STARTUPINFO) );
  with StartInfo do
  begin
    cb          := SizeOf(STARTUPINFO);
    dwFlags     := STARTF_USESHOWWINDOW;
    wShowWindow := SW_HIDE;
  end;
  Win32Check( CreateProcess(nil, PChar(ACommand) ,nil, nil, FALSE,
                            CREATE_NEW_CONSOLE, nil, nil, StartInfo, ProccesInfo) );
  repeat
    Application.HandleMessage;
    GetExitCodeProcess(ProccesInfo.hProcess, ExitCode);
  until ExitCode <> STILL_ACTIVE;
end;

el llamado lo hago asi:

Código Delphi [-]
cComprimir := 'LHA a ' + chRespaldo + ' ' + chRespaldo + '.FBK';
   cRespaldo := gBak + chRuta  + ' ' + chRespaldo + '.FBK';   
   ExecuteAndWait(cRespaldo);
   ExecuteAndWait(cComprimir);

el problema consiste en que en que siempre entra al primer ExecuteAndWait, tanto si coloco el respaldo como la compresion, pero ya no vuelve al execute del hilo.

Yo creo que algunas de las cosas de la funcion ExecuteAndWait interrumpen el hilo, pero es solo una teoria ya que no se en realidad como trabaja.

Si alguien se le ocurre algo...

Muchas gracias por leerme

dec 01-12-2007 14:10:37

Hola,

No me queda claro algo. ¿Qué se supone que hay que "pasar" en "command"? Si es la ruta de algún programa... más los comandos necesarios, no parece que sea eso lo que estás pasando, ¿no? Por otro lado, y, si no me equivoco, se supone que el procedimiento en cuestión ejecuta "algo" y espera su término. ¿Estás seguro de que se ejcuta ese "algo"? ¿Y de que termina?

En fin... añado preguntas a tus preguntas... mal vamos. :) Pero, espero que ya encontrases la solución, o que te ayude algo lo que digo, o que algún compañero, al revivir este hilo, sepa decirte algo más que pueda ayudarte. :)

eduarcol 01-12-2007 14:53:11

Cita:

Empezado por dec (Mensaje 249777)
Hola,

Hola Dec, gracias por el interes..

Cita:

Empezado por dec (Mensaje 249777)
No me queda claro algo. ¿Qué se supone que hay que "pasar" en "command"? Si es la ruta de algún programa...

Command recibe una sentencia, estilo shellexecute, con la diferencia que al ejecutarlo con ExecandWait este espera qe termine la ejecucion y sigue en la otra linea.

Cita:

Empezado por dec (Mensaje 249777)
más los comandos necesarios, no parece que sea eso lo que estás pasando,
¿no?

Si hay esto pasando los comandos que se necesitan, si te fijas en las variables mira como se arman:

Código Delphi [-]
cComprimir := 'LHA a ' + chRespaldo + ' ' + chRespaldo + '.FBK';

donde chrespaldo es el archivo donde se va a comprimir, el mismo caso del procedimiento para comprimir.


Cita:

Empezado por dec (Mensaje 249777)
Por otro lado, y, si no me equivoco, se supone que el procedimiento en cuestión ejecuta "algo" y espera su término. ¿Estás seguro de que se ejcuta ese "algo"? ¿Y de que termina?

si se ejecuta, por eso digo que solo se ejecuta el primer comando, ya el segundo no se ejecuta, y estoy seguro que se ejecuta porq el respaldo se genera, y si cambio el orden tambien lo comprime.


Cita:

Empezado por dec (Mensaje 249777)
En fin... añado preguntas a tus preguntas... mal vamos. :) Pero, espero que ya encontrases la solución, o que te ayude algo lo que digo, o que algún compañero, al revivir este hilo, sepa decirte algo más que pueda ayudarte. :)

Aun no he encontrado la solucion, pero creo que el asunto va con el createprocess y su compatibilidad con los thread estoy buscando informacion al respecto pero no encuentro nada

Gracias por el interes


La franja horaria es GMT +2. Ahora son las 13:58:16.

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