Comment implémenter ce Thread ?

Résolu
djiga4me Messages postés 15 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 30 mars 2010 - 27 déc. 2009 à 18:22
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 28 déc. 2009 à 12:38
Bonjour,
dans mon application, j'ai un timer qui effectue un check toutes les 5 secondes (une verif un peu longue) et qui par sa nature provoque un petit bloquage, ce pourquoi je voulais remplacer le timer par Thread, mais je ne sais pas trop comment implémenter la fonction du timer dans le thread et effectuer donc la même vérif.

voici le code :

Variable globale : SentVerif : Boolean;

// code du timer

Begin

if sentverif the
 begin
  timer.interval:=5000; // peut-être négligé
  StatusLabel.caption:="Pas de signal";
  try
   Disconnect; // déconnecte l'appli du server
   Reconnect; // reconnecte l'appli
  except
   IsResponging:=False;
 end;

AppeleLeServeurPourUneVerif();

End;



AppeleLeServeurPourUneVerif est une procedure Public, qui envoie un simple message (spécial) au serveur, qui alors répond (et met IsRespondig à True).

5 réponses

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
28 déc. 2009 à 01:15
Oui, si le freeze occure toutes les 5 secondes, il provient du code qui se situe dans la méthode CheckAnswer. Si tu utilises les composants Indy, il y a un composant TIDAntiFreeze, bien pratique pour atténuer les freeze.

Cordialement, Bacterius !
3
djiga4me Messages postés 15 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 30 mars 2010
27 déc. 2009 à 18:54
J'ai pensé à quelque chose dans le genre :

type
TServerCheckT=class(TThread)
Private
Procedure CheckAnswer;
Protected
Procedure Execute;override;
End;

Var {Globales} 
XToto : TServerCheckT;
SentVerif : Boolean;
SleepInterval : Integer;
IsResponding : Boolean;

// exécution du thread
Procedure TServerCheckT.Execute;
begin
while not terminted do
begin
Synchronize(CheckAnswer);
end;
end;

Procedure TServerCheckT.CheckAnswer;
begin
if sentverif the
 begin
  timer.interval:=5000; // peut-être négligé
  StatusLabel.caption:='Pas de signal';
  try
   Disconnect; // déconnecte l'appli du server
   Reconnect; // reconnecte l'appli
  except
   IsResponging:=False;
 end;

AppeleLeServeurPourUneVerif();
end;

0
djiga4me Messages postés 15 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 30 mars 2010
28 déc. 2009 à 01:12
Salut,
Merci bien Bacterius(les petits détails)

J'ai bien codé le thread, il fonctionne comme je le voulais,
il remplace ce que faisais le TTimer.

Mais il subsiste toujours un petit freez (chaque 5sec), je pense que c'est dû à la méthode "Diconnect" et à "Reconnect", sinon je ne vois pas d'autres raisons.
0
djiga4me Messages postés 15 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 30 mars 2010
28 déc. 2009 à 12:33
Bonjour,
Effectivement j'utilise les composants Indy (10 avec D2009), et oui un TIdAntiFreeze à réglé le problème.

Merci Bacterius pour votre aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
28 déc. 2009 à 12:38
Aucun problème, joyeuse fin de fêtes

Cordialement, Bacterius !
0
Rejoignez-nous