Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 03-06-2010
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
La VCL (asi como la mayoria de los toolkits graficos) no es thread-safe.

Osea, que no se puede garantizar el uso de controles VCL dentro de threads. Ademas, que realmente no es una buena idea

Lo que normalmente se hace es que ejecutas la parte *no visual* en un thread aparte y cuando obtienes los resultados, notificas al thread primario (osea, a la parte grafica) del resultado y procedes tal cual.

Para www.bestsellerapp.com queria ponerle la funcionalidad de detectar una nueva version sin obstruir al usuario o interrumpir las ejecuciones (bestseller tiene una parte que corre en el iPhone y un servidor Web hecho con RemObjects que corre en PC/OSX).

Busca en Google "delphi threads" para que te empapes bien. Es bueno que leas un rato ANTES de hacer nada. Este es de los temas que realmente saca canas...

Asi que necesitaba chequear la version en el servidor web y notificar si habia o no una actualizacion. Te paso lo que tengo hasta ahora pa que te des una idea:

1. Debes crear una clase que administre la ejecucion de la tarea dentro del thread. En mi caso, property Return es el dato que estoy esperando a que ejecute:

Código Delphi [-]
type
  TCheckUpdate = class(TThread)
  private
    FReturn: integer;
  protected
    procedure Execute; override;
  public
    property Return: integer read FReturn write FReturn;
  end;

Y debes implementar el EXECUTE, almacenando (de ser necesario) el resultado del calculo o proceso:

Código Delphi [-]
procedure TCheckUpdate.Execute;
var
  App: TAppConfig;
begin
  inherited;
  App := TAppConfig.Create;
  Return := 0;

  if App.UpdateAvailable then
  begin
    Return := 1;
  end else begin
    Return := 2;
  end;//if
end;

En algun lado, debes crear el thread y ponerlo a correr...
Piensa en el thread como un proceso "background":
Código Delphi [-]
procedure TfrmMain.actCheckUpdateExecute(Sender: TObject);
var
  NewThread: TCheckUpdate;
begin
  NewThread := TCheckUpdate.Create(True);
  NewThread.FreeOnTerminate := True;
  NewThread.OnTerminate := HandleTerminate;

  NewThread.Resume;

3. Un metodo donde recibes los resultados que esperabas:
Código Delphi [-]
procedure TfrmMain.HandleTerminate(Sender: TObject);
begin
  LogMsg('Cheking for new version..');
  if (Sender as TCheckUpdate).Return=1 then
  begin
    btnUpdate.Action := actUpdateServer;
    LogMsg('New version available. Please update the server');
  end else begin
    btnUpdate.Action := actUptoDate;
    LogMsg('Server is up to date!');
  end;//if
end;
__________________
El malabarista.
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
como crear hilos de ejecucion en delphi 2007 pablopessoa Varios 1 23-10-2008 19:11:08
hilos en delphi. [URGENTE] noukeys Varios 2 11-06-2008 17:42:15
Hilos johurgi Varios 2 16-07-2007 10:57:08
Multiple Hilos con Indy en Delphi 6 cancerbero Varios 4 12-06-2004 19:01:21
Hilos en delphi seduerey OOP 4 30-04-2004 11:24:51


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


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
Copyright 1996-2007 Club Delphi