|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Problème à la mise en place d'un thread [ Archives / J'AI BESOIN D'AIDE !!!! :O ] (John Dogget)
Informations & options pour cette discussion
|
samedi 13 mai 2006 à 20:28:38 |
Problème à la mise en place d'un thread

John Dogget
|
Salut à tous. J'utilise une fonction qui récupère l'adresse IP d'un ordinateur à partir d'un site web. Comme cette fonction est dépendante du réseau, sa vitesse d'execution varie et bloque parfois mon appli. D'où l'idée de mettre un thread en place pour permettre à celle-ci de continuer son travail de manière fluide. C'est une fonction toute bête du genre "function RechercherIP:string; Le problème, c'est que je sais pas trop comment m'y prendre, le tuto du site m'as paru assez obscure  Comment récupérer le résultat de la fonction à travers le thread ? Comment mettre celui-ci en place ? Bref, comment ça fonctionne 
|
|
|
|
dimanche 14 mai 2006 à 07:32:35 |
Re : Problème à la mise en place d'un thread

f0xi
|
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type
TMyThread = class(TThread) private fThreadResult : string; protected procedure Execute; override; public property ThreadResult : string read fThreadResult; end;
TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } procedure GetIPThreadThreadTerminate(Sender : TObject); end;
var Form1: TForm1; GetIPThread : TMyThread;
implementation
{$R *.dfm}
procedure TMyThread.Execute; begin fThreadResult := ''; { .. code traitement .. } fThreadResult := 'hello world'; Self.Terminate; end;
procedure TForm1.FormCreate(Sender: TObject); begin GetIpThread := TMyThread.Create(true); GetIpThread.FreeOnTerminate := false; GetIpThread.OnTerminate := GetIpThreadThreadTerminate; end;
procedure TForm1.FormDestroy(Sender: TObject); begin GetIpThread.Free; end;
procedure TForm1.GetIPThreadThreadTerminate(Sender : TObject); begin { .. renvoyer le resultat ThreadResult la ou il faut .. } Caption := GetIpThread.ThreadResult; end;
procedure TForm1.Button1Click(Sender: TObject); begin GetIpThread.Resume; end;
end.
|
|
|
|
dimanche 14 mai 2006 à 10:46:19 |
Re : Problème à la mise en place d'un thread

John Dogget
|
Quelques petites questions ... - une partie de ce code est généré avec l'assistant Delphi ? - je peux définir ce thread dans une unité à part ou je suis obligé de l'intégrer à une form ? - la méthode Resume n'est pas defini, c'est normal ? Ton code est bien, mais ya pas beaucoup d'explications dedans  Merci quand même ...
|
|
|
|
dimanche 14 mai 2006 à 18:08:41 |
Re : Problème à la mise en place d'un thread

elguevel
|
Tu peux mettre ton Thread dans une unité à part, et la méthode Resume fait partie integrante de la classe TThread, elle permet de faire démarrer le Thread si celui ci est suspendu ... Ce qui est le cas ici grace à l'argument 'True' dans l'appel du constructeur :
GetIpThread := TMyThread.Create(true);
qui signifie, je crée le Thread mais je le suspend (mis en pause).
A+ et Bon CoDinG
|
|
|
|
lundi 15 mai 2006 à 16:34:04 |
Re : Problème à la mise en place d'un thread

f0xi
|
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type { Classe TGetIPThread } TGetIPThread = class(TThread) private { variable privée pour le retour du thread } fThreadResult : string; protected { procedure appelée par la procedure Resume du thread } procedure Execute; override; public { propriété publique qui donne pointe vers le resultat du thread } property ThreadResult : string read fThreadResult; end;
TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); private public { procedure pour gerer l'evenement OnTerminate du thread } procedure GetIPThreadThreadTerminate(Sender : TObject); end;
var Form1: TForm1; { une variable pour notre objet thread } GetIPThread : TGetIPThread;
implementation
{$R *.dfm}
{ methode Execute du thread } procedure TGetIPThread.Execute; begin { on vide le resultat } fThreadResult := '';
{ .. ici on mets le traitement .. }
{ on assigne le resultat } fThreadResult := 'IP'; { on arrete le thread ce qui appeleras l'evenement OnTerminate } Self.Terminate; end;
procedure TForm1.FormCreate(Sender: TObject); begin { on crée le thread en mode "pause" ... True } GetIpThread := TGetIPThread.Create(true); { on ne libere pas quand on termine le thread } GetIpThread.FreeOnTerminate := false; { on assigne la procedure de traitement de l'evenement OnTerminate } GetIpThread.OnTerminate := GetIpThreadThreadTerminate; end;
procedure TForm1.FormDestroy(Sender: TObject); begin { on arrete le thread et on le libere } GetIpThread.Terminate; GetIpThread.Free; end;
procedure TForm1.GetIPThreadThreadTerminate(Sender : TObject); begin { .. renvoyer le resultat ThreadResult la ou il faut .. } Caption := GetIpThread.ThreadResult; end;
procedure TForm1.Button1Click(Sender: TObject); begin { on demarre le thread, on peu le placer egalement dans un autre evenement on verifie qu'il n'est pas deja demarrer ... } if GetIpThread.Terminated or GetIpThread.Suspended then GetIpThread.Resume; end;
end.
|
|
|
|
jeudi 18 mai 2006 à 23:35:45 |
Re : Problème à la mise en place d'un thread

John Dogget
|
Je vais essayer d'adapter ça à mon code.
J'ai une autre question : Mon thread est défini dans une unité à part (pas une form donc), pour le créer, je ne peux pas utiliser l'evenement FormCreate parce qu'il n'existe pas. - à quel moment puis je créer celui-ci ? - si je le créer depuis ma form principale, ça va marcher ?
|
|
|
|
vendredi 19 mai 2006 à 07:14:37 |
Re : Problème à la mise en place d'un thread

elguevel
|
Cà ne change rien du tout, ton Thread et ton FormCreate sont toujours dans deux classes séparer.
Il suffira juste dans ton unité qui contient ta Form d'ajouter dans la clause uses l'unité de ton thread, et tu instancie ton thread de la meme façon avec FormCreate.
|
|
|
Cette discussion est classé dans : problème, fonction, site, thread, place
Répondre à ce message
Sujets en rapport avec ce message
Problème avec Canvas.draw [ par fabiin ]
salut,voici mon prob:j'utilise un threaddans ce thread dans ce thread je dessine sur un TBitmap(jusque la pas de problème)ensuite, je veu afficher mon
Frame et thread [ par stailer ]
Salut tout le monde !J'ai un problème avec les threads et j'aurai besoin d'une explication :Si je lance un thread avec une fonction sur une fiche il y
Problème création thread [ par VolaiL ]
Bonjour, j'ai un petit problème de création de thread.Je souhaiterai lancer le thread lorsqu'on appuie sur enter, mais ca bloque dès la crétion sur "i
Problème de fonction déclarée dans Public [ par crostif ]
Bonjour,j'ai eu une fonction à déclarer en publique pour y faire appel depuis d'autres formes (les uses sont correctement déclarée)lors de la compilat
Problème IdHTTP1.Disconnect [ par architect ]
Bonjour, J'ai un problème actuellement avec la fonction IdHTTP1.Disconnect. Mon but étant de pouvoir arrêter un téléchargement en cours de route. Voi
Evenements d'un TApplication non géré à cause d'un chargment de DLL... [ par OrsE ]
Salut tout le monde, Ceci est la suite de ce post, http://www.delphifr.com/forum.v2.aspx?ID=480490 Je le refait car j'ai pu identifier le problème cet
Soit le Thread, soit l'UDP [ par stailer ]
Salut tout le monde,J'ai un petit problème avec mon appli en développement :J'utilise un thread dans lequel s'éxecute une connexion à des serveurs par
IncHour [ par Eric84 ]
Bonjours, J'ai un problème avec la fonction INCHOUR. Code : if (FichierTransfert.ReadString('Configuration', 'Periode', '') 'NOR') then IncHou
probleme avec la fonction length [ par informatixo ]
J'ai réalisé une fonction EstNumerique en m'inspirant d'une solution que delphiprog avait donné dans un post, donc ne vous étonnez pas de ce nom. Je
Problème de thread avec un idhttp (indy 10) [ par ACHPI32 ]
Hello,J'essaye de faire un petit téléchargeur avec le composant tidhttp. Tout fonctionne sauf... l'interruption en cours de téléchargement. En fait je
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|