Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 15-01-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Se supone que el Hilo principal de la aplicacion se va detener en una funcion hasta que ésta devuelva el resultado esperado, un ejemplo claro de esto es la funcion ShowModal de los formularios.
Código Delphi [-]
begin
Form1.ShowModal;//<--se detiene la ejecucion aqui hasta que se cierra el formulario
Edit1.Text:='Hola';//esta linea solo se va a ejecutar si la funcion anterior termino
end;
Siguiendo ese ejemplo, el truco que buscas seria hacer detener tu funcion (MiFuncion) hasta que el metodo Execute del hilo que creaste devuelva o resuelva el resultado que buscas(segun te entiendo); para lo cual la solucion esta en utilizar una variable dentro de tu clase Hilo (MiHilo) que indique si ya el metodo Execute resolvio el resultado esperado, para que tu funcion (MiFuncion) lo devuelva;
La variable a utilizar para eso podria ser una Booleana;
Un codigo ejemplo seria:
Código Delphi [-]
unit Unit2;

interface

uses
  Classes;

type
  MiHilo = class(TThread)
  private
    { Private declarations }
   YA:Boolean;//Variable que necesito inicializar en FALSO ; ya velo tu donde debes hacerlo
  protected
    procedure Execute; override;
  Public
    Function MiFuncion():Integer;//<-- es solo un ejemplo
  end;


implementation

uses SysUtils;

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure MiHilo.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ MiHilo }

function MiHilo.MiFuncion: Integer;
begin
  while not YA do ;//<---se Duerme Mientras que la variable YA este en falso
  //Desde Luego el metodo Execute ya debe estar ejecutandose
  Result:=Lo_Que_Sea;
end;

procedure MiHilo.Execute;
begin
  { codigo de ejecucion del metodo Execute}
 ...
 {cuando este metodo resuelva el resultado esperado por la funcion MiFuncion
  entonces cambiamos el valor de la variable YA;  algo asi:}
 if Se_Resolvio_Lo_que_esparaba_Resolverse then
     YA:=True;
end;
end.
Espero que se haya entendido la idea.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 15-01-2010 a las 15:46:25.
Responder Con Cita
 



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
Problema con hilos zajoma OOP 4 13-04-2009 16:48:15
Los hilos se destruyen?? dtomeysoto Varios 1 13-03-2009 22:00:14
Hilos johurgi Varios 2 16-07-2007 10:57:08
ver hilos Cosgaya Varios 1 07-06-2005 20:35:16
Hilos con COM urush30 Varios 0 21-09-2004 10:07:37


La franja horaria es GMT +2. Ahora son las 21:40:04.


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