Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-01-2009
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
Ayuda con Hilos de ejecucion

hola amigos necesito su ayuda me estoy involugrando en la programacion multihilos en delphi e estado leyendo varios tutoriales de como crear hilos en delphi para una aplicacion y me e puesto a praticar los ejemplo que dichos tutoriales muestran pero resulta que niguno de esos ejemplo me funciona y me dan error aqui le muestro uno que e hecho pero igual no me corre me gustaria que me dijieran el que le hace falta y el que esta mal
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  TMyhilo = class(Thread)
  private
  protected
  procedure execute;override;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TMyhilo.Execute;
begin

//aqui es donde se implementa el codigo que hira en el hilo//

end;
end.
Responder Con Cita
  #2  
Antiguo 15-01-2009
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 18
Kipow Va por buen camino
primero la declaracion esta mala

Código Delphi [-]
TForm1 = class(TForm)
end;
TMyhilo = class(TThread)
protected
  procedure execute;override;
end;

segundo en el procedimiento execute no hay nada que ejecutar. seria mejor que nos
explicaras que queres hacer para poder ayudarte mejor.
Responder Con Cita
  #3  
Antiguo 15-01-2009
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
lo que quiero es aprender a utilizar la clase tthread en cualquier aplicacion que valla a necesitarlo
Responder Con Cita
  #4  
Antiguo 15-01-2009
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.232
Poder: 20
ElKurgan Va camino a la fama
Si buscas en google "threads+delphi", con la opción de castellano, te aparecen algunos enlaces, el primero de ellos un tutorial que puede servirte para empezar... (en concreto a mi me salen 15.100 páginas con este tema, por lo que información no te va a faltar)

Un saludo
Responder Con Cita
  #5  
Antiguo 15-01-2009
Avatar de white_zombie
[white_zombie] white_zombie is offline
Miembro Premium
 
Registrado: nov 2005
Ubicación: Zaragoza - España
Posts: 187
Poder: 19
white_zombie Va por buen camino
Hola, una buena lectura para comenzar la programacion multihilo son los numeros 11,12,13,14,15,16 de la revista sintesis del grupo Albor
http://www.grupoalbor.com/sintesis/contenidos.php?id=11

Un Saludo.
Responder Con Cita
  #6  
Antiguo 15-01-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por kurono Ver Mensaje
lo que quiero es aprender a utilizar la clase tthread en cualquier aplicacion que valla a necesitarlo

En la sección de ejemplos de mi página hay varios sobre threads. Están con código fuente y funcionan; Échales un vistazo y a ver si te aclaras. Si no puedes pregunar aquí.
Si no recuerdo mal, en el FTP del club también hay algun ejemplo que puedes revisar.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 15-01-2009
Avatar de casacham
casacham casacham is offline
Miembro
 
Registrado: abr 2006
Ubicación: Cordoba->Argentina. Arboleas->Almeria->España
Posts: 184
Poder: 18
casacham Va por buen camino
Cool De consejo en consejo

Hola amigo "kurono", simplemente como dicen en diagnostico por imagenes: "El que no sabe que busca, no entiende lo que encuentra . . . ". Para poder aprender a programar con multihilos (dos o mas tareas ejecutandose al mismo tiempo con distinta prioridades [en resumen]) y con cualquier otra herramienta u objeto en Delphi debes tener por lo menos una idea concreta a la cual se aplique, o te daria una solucion. Asi que esta bien que leas sobre TThread, pero tambien es mejor si te propones un objetivo. Por ejemplo, este objeto te da la posibilidad de realizar otra tarea mientras buscas un archivo por el disco. Lo que vale es la imaginación. Para empezar debes tener en claro como funciona este ejemplo de Neftali. Estudia este codigo y pdras entrar al mundo multihilo.
__________________
La vida no trata de encontrarse a uno mismo, sino de crearse a uno mismo.
Tanto si piensas que puedes como si no, estarás en lo cierto
Responder Con Cita
  #8  
Antiguo 16-01-2009
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
ok amigos estoy leyendo algunos tutoriales que e encontrado en google
Responder Con Cita
  #9  
Antiguo 16-01-2009
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
amigos disculpen e logrado hacer un hilo con la ayuda de algunos ejemplo que e contrado pero lo que no entiendo es como llamo el procedimiento execute para ejecutar el hilo
Responder Con Cita
  #10  
Antiguo 16-01-2009
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 18
Kipow Va por buen camino
Cuanto lo creas le indicas si lo creas suspendido o no, asi:

Si el parametro es Verdadero el hilo no se inicia hasta que le des un resume;

Ahora bien si es falso de una vez lo ejecuta al solo crearlo.

Código Delphi [-]
TMythread := TThread.Create(true);   // Aca lo estoy creando suspendido
.
.
.
.

TMythrea.Resume; // Aca ejecuto el procedimiento execute;
Responder Con Cita
  #11  
Antiguo 16-01-2009
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
gracia amigo Kipow lo probare
Responder Con Cita
  #12  
Antiguo 16-01-2009
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
disculpa amigo Kipow pero el codigoTMythrea.Resume; me da error
Responder Con Cita
  #13  
Antiguo 16-01-2009
Avatar de white_zombie
[white_zombie] white_zombie is offline
Miembro Premium
 
Registrado: nov 2005
Ubicación: Zaragoza - España
Posts: 187
Poder: 19
white_zombie Va por buen camino
Hola, puedes dar algun dato mas del error o poner el codigo del thread y el codigo desde donde lo llamas.
Responder Con Cita
  #14  
Antiguo 16-01-2009
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
aqui esta parte del codigo que utilizo


Código Delphi [-]
procedure TMyhilo.execute;
 var
       N,S:integer;

             begin

          n:=1500 ;

   s:=1500;

repeat
         s:=s+n;

              inc(n);

  until n=10;

            label2.Caption :=formatdatetime('hh:nn:ss:zzz',Now - HoraInicial);

       listbox1.lines.Add('Tiempo de Respuesta del calculo en :  '+label2.Caption  +  '  Mn '+listbox1.lines.NameValueSeparator  +  ' Completada');

 if listbox1.lines.Count=22 then

                nivel1.Enabled:=false;

       tiempo.Enabled:=false;

       if listbox1.lines.Count=22 then

       begin
       listbox1.Lines.Add('++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++');

   listbox1.lines.Add('Prueba Finalizada: '+label2.Caption +' Mn');

  end;

end;
procedure TForm1.prueba1Click(Sender: TObject);
begin
 TMyhilo.Create(true);
 TMyhilo.Resume;

end;

end.
Responder Con Cita
  #15  
Antiguo 16-01-2009
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
el error que me da es este


Código Delphi [-]
[Error] Unit1.pas(534): This form of method call only allowed for class methods
Responder Con Cita
  #16  
Antiguo 16-01-2009
Avatar de white_zombie
[white_zombie] white_zombie is offline
Miembro Premium
 
Registrado: nov 2005
Ubicación: Zaragoza - España
Posts: 187
Poder: 19
white_zombie Va por buen camino
A simple vista ha varias cosas que no estan bien, te recomiendo que para crear el hilo vayas a File-new-Other-Thread object, te pide el nombre que deseas darle al hilo en tu caso TMyhilo. Te queda esto.

Código Delphi [-]
unit Unit2;

interface

uses
  Classes;

type
  TMyhilo = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;

implementation

{ 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 TMyhilo.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ TMyhilo }

procedure TMyhilo.Execute;
begin
  { Place thread code here }
end;

end.

Para llamar a este hilo por ejemplo desde la unidad principal

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,unit2;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  hilo:Tmyhilo;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
hilo:=Tmyhilo.Create(true);
hilo.Resume;
end;

Mas cosas, como veras que pone en el codigo del thread no se debe desde un hilo cambiar propiedades ni usar metodos de componentes visuales.
Para esto de usar Synchronize.

Un ejemplo

Código Delphi [-]
unit Unit2;

interface

uses
  Classes,windows;

type
  TMyhilo = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
    procedure update_label;
  end;

implementation

uses unit1;

procedure TMyhilo.Execute;
begin
  Synchronize(update_label);
end;

procedure TMyhilo.update_label;
begin
 form1.Label1.Caption:='Esto es una prueba';
end;

end.

Echale un vistazo a esto y comparalo con tu codigo.
Te recomiendo leer sobre el tema porque hay muchas cosas que saber antes de empezar a programar, los manuales que te recomende en mi primer post explica todo esto.

Última edición por white_zombie fecha: 16-01-2009 a las 23:43:12.
Responder Con Cita
  #17  
Antiguo 16-01-2009
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
ok probare eso ahora
Responder Con Cita
  #18  
Antiguo 17-01-2009
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 18
Kipow Va por buen camino
Tenes que instanciar la variable, hacelo como te lo pongo y deberia de funcionar.

Código Delphi [-]
procedure TForm1.prueba1Click(Sender: TObject);
begin
 MyHilo := TMyhilo.Create(true);
 Myhilo.Resume;
end;
Responder Con Cita
  #19  
Antiguo 15-01-2011
Philip_ Philip_ is offline
No confirmado
 
Registrado: abr 2010
Posts: 8
Poder: 0
Philip_ Va por buen camino
Mira este ejemplo explica algo

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TFPrincipal = class(TForm)
EContador: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
Tcontador= class(TThread)
dwTiempoword;
iSegundos:integer;
Etiqueta:Tlabel;
constructor Create; reintroduce ; overload ;
procedure execute; override;
procedure ActualizarPantalla;
end;

var
FPrincipal: TFPrincipal;
Contador:Tcontador;

implementation

{$R *.dfm}

{ Tcontador }

procedure Tcontador.ActualizarPantalla;
begin
Etiqueta.Caption:=IntToStr(iSegundos);
end;

constructor Tcontador.Create;
begin
inherited Create(True);//lamamos al constructor padre (TThread)
dwTiempo:=GetTickCount;
iSegundos:=0;
end;

procedure Tcontador.execute;
begin
inherited;
//CONTAMOS HASTA 10SEGUNDOS
while iSegundos<10 do
//¿an pasado 1000 milisegundos?
if GetTickCount - dwTiempo>1000 then
begin
//incrementamos el contador de segundos y actualizamos la etiqueta
Inc(iSegundos);
Synchronize(ActualizarPantalla);
//Etiqueta.Caption:=IntToStr(iSegundos);
dwTiempo:=GetTickCount;

end;

end;

procedure TFPrincipal.FormCreate(Sender: TObject);
begin
Contador:=Tcontador.Create(True);
Contador.Etiqueta:=EContador;
Contador.FreeOnTerminate :=True;
Contador.Resume;
end;

end.
Responder Con Cita
  #20  
Antiguo 15-01-2011
Philip_ Philip_ is offline
No confirmado
 
Registrado: abr 2010
Posts: 8
Poder: 0
Philip_ Va por buen camino
por cierto el formulario se llama FPrincipal y se coloco en el un label que se llama EContador
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
como crear hilos de ejecucion en delphi 2007 pablopessoa Varios 1 23-10-2008 20:11:08
Ayuda Con Hilos(Threds) juangiron OOP 1 04-05-2007 20:46:24
Aplicacion con varios Hilos de Ejecución samantha jones Varios 1 02-03-2005 18:27:24
Hilos de ejecucion el toluca Varios 2 29-06-2004 23:59:04


La franja horaria es GMT +2. Ahora son las 13:27:42.


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