Newsgroup: it.comp.lang.delphi
Titolo: Evento in un thread

Ciao a tutti, qualcuno mi da una dritta?
Sto facendo alcuni test con i componenti ICS ma lo stesso discorso varrebbe 
con qualunque componente
Creo un thread
type
  THttpThread = class(TThread)
  private
    FHttp: THttpCli;
  protected
    procedure Execute; override;
  end;
...
FHttpThread:  THttpThread;
...
creo il componente a runtime
FHttpThread := THttpThread.Create(True);
FHttpThread.FHttp := THttpCli.Create(nil);
ora, se dall'interno della procedura Execute imposto i vari parametri ed 
eseguo un FHttp.Post  è tutto ok, la pagina web riceve il post rispondendo 
alla richiesta...
ma come implementare i vari eventi sollevati dal componente all'interno del 
thread?
Nella fattispecie dovrei leggere FHttpRequestDone...come andrebbe dichiarata 
questa procedura o eventualmente dove posso trovare un pò di codice 
d'esempio?
Grazie
Valter

 procedura
La dichiarazione la trovi specificata nel tipo di evento. Es:
TWorkEndEvent = procedure(ASender: TObject; AWorkMode: TWorkMode) of
object;
procedure OnWorkEnd(ASender: TObject; AWorkMode: TWorkMode);
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

 del thread?
Intendi come rendere sincrone le chiamate asincrone?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


no, temo che la domanda sia un pò più banale e tremendamente da newbie ma 
ahime non ne vengo fuori!
ti spiego:
prendo un componente, immagina un THttpCli di qualunque suite faccia parte e 
lo trascino sulla form
quindi accedo al suo evento HttpCliRequestDone dall'Object Inspector e ci 
metto un semplice showmessage()
effettuo un Post tramite il componente e mi si solleva come ovvio l'evento 
alla risposta del server
sto cercando di traslare il tutto in un thread
quindi come detto:
type
  THttpThread = class(TThread)
  private
    FHttp: THttpCli;
  protected
    procedure Execute; override;
  end;
...
FHttpThread:  THttpThread;
...
a runtime creo il componente, attivo il thread e da Execute lo uso
(semplifico)
FHttpThread := THttpThread.Create(True);
FHttpThread.FHttp := THttpCli.Create(nil);
FHttpThread.Resume;
ok fino a FHttp.Post che mysql riceve correttamente ma, buio assoluto, non 
so come accidenti dichiarare nella classe TThread l'evento 
HttpCliRequestDone con il risultato che non leggo la risposta del server.
Intendo dire, bisognerà ben che assegni/ridichiari in qualche modo l'evento 
al THttpThread altrimenti come lo gestisco? O sono fuori strada?
V

 FHttpThread.Resume;
Devi dichiarare un metodo della classe thread come ti è stato già mostrato
da Filippo quindi assegnare il suo valore all'atto della creazione
dell'oggetto:
private:
   procedure Metodo(.......); 
...
FHttpThread.FHttp := THttpCli.Create(nil);
FHttpThread.Metodo := Metodo;


 FHttpThread.Resume;
Devi dichiarare un metodo della classe thread come ti è stato già mostrato
da Filippo quindi assegnare il suo valore all'atto della creazione
dell'oggetto:
private:
   procedure Metodo(.......); 
...
FHttpThread.FHttp := THttpCli.Create(nil);
FHttpThread.FHttp.Evento := Metodo;



è andata, grazie ad entrambi
ciao
V