PDA

Ver la Versión Completa : Lio con Procedures!!!


diegofhernando
12-11-2003, 15:02:47
Que tal foro... tengo un problemilla que sinceramente no se si se pueda corregir la verdad es que no estoy mu bien documentado al respecto, lo que deseo es llamar desde un procedmiento A a un procedimiento B, normalmente el procedimiento A espera a que termine el procedimiento B y ejecuta la siguiente linea del codigo. lo que quiero es que al realizar la llamada del procedimiento B el procedimiento A termine.

Gracias por su colaboracion.

Salu2:cool:

delphi.com.ar
12-11-2003, 15:10:22
procedure ProcA;
begin
....
if EjecutaProcB Then
begin
ProcB;
Exit; {Sale del ProcA}
end;
....
end;

procedure ProcB;
begin
....
end;



¿¿Algo Asi??

diegofhernando
12-11-2003, 15:20:53
Hola, gracias por tu respuesta... especifico un poco mas... estoy desarrollando un aplicacion con los Indy, en el evento Execute del TCPServer tengo un codigo que debe mostrar un form de acuerdo a lo que reciba. El problema es que al tratar de mostrar el nuevo form pues se descompone toda la aplicacion, pero si pongo el codigo en un timer funciona perfecto algo asi:

procedure TForm1.TCPServerExecute;
begin

// otro codigo

if comando = 'nuevo' then
timer1.enabled:= true;

end;


procedure TForm1.Timer1Timer;
begin
form2.show;
end;


obviamente cuando se habilita el timer el procedimiento del TCPServer continua y termina pero no espera hasta que el procedimiento del timer se ejecute.

Espero que comprendas lo que trato de decir y me puedas dar una mano con esto problemilla.

Gracias de nuevo.

delphi.com.ar
12-11-2003, 15:26:21
Eso es otra cosa... no estas llamando a un procedure dentro de otro, sino que estas activando un Timer que en otro hilo ejecuta tu procedure al mismo tiempo.
Porqué no trabajas con una variable Boolean, le asignas el Active a esta y cuando termina tu procedure lo activas/desactivas?


procedure TForm1.TCPServerExecute;
var
bTimerActive: boolean;
begin
bTimerActive := Timer1.Active;
...
if comando = 'nuevo' then
bTimerActive := True;
...
Timer1.Active := bTimerActive;
end;


Saludos!

diegofhernando
12-11-2003, 15:38:58
volvamos al inicio...

procedure A;
begin
if comando = 'nuevo' then
begin
procedure B(Parametro);
exit;
{ como ves hasta que no termine el procedimiento B no sale
el procedimiento A, esto es lo que necesito, bien sea que el
procedmiento A continue su ejecucion sin esperar al
procedimiento B o que termine cuando llame al procedimiento
B}
end;
end;


procedure B(Parametro);
begin
form2.show;
end;

delphi.com.ar
12-11-2003, 15:47:44
Ahora Si... (Eso espero :D)
Sin lugar a dudas vas a necesitar utilizar Theads, para crear un nuevo hilo de ejecución... Te recomiendo ver la ayuda del TThread!


Saludos!

diegofhernando
12-11-2003, 15:52:29
Muy bien voy a probar lo que me dices...
Gracias por tu colaboracion. Salu2:cool:

roman
12-11-2003, 16:40:39
No entiendo.

El procedimiento B únicamente muestra un formulario y esta es una acción inmediata, es decir, el formulario se muestra y el programa continúa la ejecución normal: termina el procedimiento B y se regresa a A. Lá unica razón que veo para tener que lanzar B desde otro hilo es porque la creación del formulario sea inusitadamente larga.

// Saludos

diegofhernando
12-11-2003, 16:54:43
bueno pues tienes razon roman, pero comentaba utilizo los Indy y estoy utilizan el hilo de la aplicacion mientras se ejecutan por esta razon cualquier otro cosa que se ejecute fuera del formulario donde se genera el codigo secillamente muere!!