IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

TIdTCPServer et timer récalcitrant


Sujet :

Langage Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 487
    Points : 3 120
    Points
    3 120
    Par défaut TIdTCPServer et timer récalcitrant
    Bonjour

    J'utilise un TIdTCPServer et sa procédure execute pour récupérer le contenu d'un fichier.
    Ce fichier doit être traité dans une fenêtre modale. En fait, fichier d'import qui doit être visualisé et confirmé (voir modifié) par l'utilisateur.

    Dans le execute du server, si je fais un showmodal de ma fenêtre, l'état modal n'est pas pris en compte.
    Je peux donc revenir sur mon appli principale, ce que je ne veux pas.

    J'ai donc pensé à déclencher un timer dans le execute qui doit se déclencher 1 seconde après la fin du execute.
    Sauf que mon timer ne s'active jamais. Je n'arrive jamais dans l'évènement OnTimer.

    Je vois bien qu'il y a un problème de synchro entre le code execute et mon thread principal mais je ne vois pas comment contourner le problème.

    Une idée ???

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Soit tu utilises un Synchronize si le OnExecute est dans un thread différent du Thread VCL
    Soit tu utilises une TThreadList dans laquelle tu ajoutes les fichiers à valider et dans le OnIdle de la MainForm tu scrutes cette liste, une fois validée, soit tu changes un statut dans le Record utilisé comme item de la TThreadList ou alors, tu utilises une autre TThreadList qui sera scruté par un autre thread ...

  3. #3
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 487
    Points : 3 120
    Points
    3 120
    Par défaut
    Effectivement, un simple TThread.Synchronize(TThread.Current, Importe); a résolu le problème.

    J'avais tenté CreateAnonymousThread mais ça faisait planter mon application.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire un Timer de fonction PORTABLE ?
    Par dieuP1guin dans le forum C
    Réponses: 3
    Dernier message: 04/07/2003, 10h44
  2. [horloge] conflit caractère / timer
    Par JeanJean dans le forum C
    Réponses: 10
    Dernier message: 09/05/2003, 23h47
  3. [] [Réseau] Anti-timer, anti-idle
    Par clonevince dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/01/2003, 22h19
  4. Timer de précision
    Par guigui dans le forum MFC
    Réponses: 1
    Dernier message: 04/12/2002, 15h21
  5. Timer en µsecondes
    Par Dagobert dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 25/11/2002, 00h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo