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

WinDev Discussion :

Gestion des Threads


Sujet :

WinDev

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut Gestion des Threads
    Bonjour à tous,
    Je réalise un logiciel où je suis en interaction entre un pistolet de type Powerscan M8300 et un écran tactile. J'ai donc réalisé une procédure locale exécutée en tâche de fond (Thread) toutes les secondes pour voir si le pistolet me dit quelquechose et intéragir en fonction sans altérer la partie tournant sur le tactile. J'ai souvent des AppCrashB1 que je ne peux pas expliquer alors j'ai réalisé un audit d'exécution et je m'aperçois que j'ai un grand nombre de message du genre
    Erreur dans le traitement Clic sur BTN_Valider.
    Le thread 'THREADxxxx' est bloqué et n'a pas pu être arrêté normalement, il a été détruit.
    J'ai, pourtant, systématiquement fait un "FinAutomatismeProcédure" à la fermeture de chacune de mes fenêtres. Des idées?

  2. #2
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Bonjour,

    Ne serait-il pas plus judicieux de passer par des événements pour communiquer avec le pistolet ?

    Cela éviterais d'utiliser un thread toutes les x secondes.

    Comment cela fonctionne ? Socket ? Port USB ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    C'est clair qu'il faut que je fasse l'essai. C'est un pistolet en USB (COM5). Toutes les secondes je récupère une lecture sur le port. Je me plonge dans la doc... merci de la piste!

  4. #4
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    D'accord, cela devrais être faisable

    Comme ça, dès que le pistolet doit communiquer, il envoi un événement que tu intercepte dans ton appli sans trop bloquer le thread principal.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    Bonjour,
    Cela fonctionne mais j'ai encore un soucis. J'ai donc fait une gestion d’événement sur un écran :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sEvénement(gtaTab_lecteur[gnNbPeriph]:nNumPort,sEveCaractèreReçu, LireCBPlanning)
    Dans la procédure LireCBPlanning, j’appelle une autre procédure qui ouvre un nouvel écran. Avant cela, je fais bien un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	sFinEvénement(gtaTab_lecteur[gnIndicePeriph]:nNumPort,sEveCaractèreReçu)
    qui me renvoie Faux d'ailleurs et même un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	gclPeriph:FermerConnexion(gtaTab_lecteur[gnIndicePeriph]:nNumPort)//Fermer le port COM
    pour assurer le coup.
    Dans le nouvel écran, j'ouvre à nouveau mon port et je fais un nouvel événement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bTest = sEvénement(gtaTab_lecteur[gnIndicePeriph]:nNumPort, sEveCaractèreReçu, LireCBIncorporation)
    là j'ai un renvoi à Vrai mais l’évènement ne fonctionne pas! Quand je quitte l'écran je referme mon port je reviens dans l'écran précédent, j'ouvre ma COM et je redéfinie l'événement, cela remarche!! Y'a un truc qui m'échappe là!

  6. #6
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Je serais toi je ne ferais pas de sFinEvénement, je laisserais le pistolet envoyé autant d’événements qu'il souhaite...

    Essai et dis moi.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    Je voudrais bien mais entre les 2 fenêtres le comportement du périphérique n'est pas le même. J'ai une procédure défini par écran!

  8. #8
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Je ne vois pas le soucis...

    Tu crée une procédure qui effectue la bonne action selon la fenêtre ouverte ? Non ..?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    Oui j'ai une procédure par écran.
    1er écran -> initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sEvénement(gtaTab_lecteur[gnNbPeriph]:nNumPort,sEveCaractèreReçu, LireCBPlanning)
    dans la fonction LireCBPlanning, j'ai un appel à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sFinEvénement(gtaTab_lecteur[gnIndicePeriph]:nNumPort)
    puis l'ouverture d'un nouvel écran avec la fonction Ouvre et dans l'initialisation de celle-ci j'ai un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sEvénement(gtaTab_lecteur[gnIndicePeriph]:nNumPort, sEveCaractèreReçu, LireCBIncorporation)
    Mais l’événement de la 2ème fenêtre ne fonctionne pas! Quand je quitte la 2ème fenêtre pour revenir à la 1ère, je réactive l’événement et cela fonctionne!! Je constate que le sFinEvénement de la première fenêtre me renvoie faux mais sans explication. J'ai essayé de fermer le port de COM puis de le réouvrir mais sans succès! Pour l'instant j'ai crée un thread qui boucle toutes les 1s dans ma 2ème fenêtre et qui scrute le port mais j'ai l'impression que le FinAutomatismeProcédure ne fonctionne pas à chaque fois!

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    Problème soumis à PcSoft...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    et botté en touche 24h après...
    Dans ce cas, il faudrait disposer de votre périphérique et le service Assistance Directe pourrait vous aider à la mise au point du processus. Ce niveau de prestation est assuré par le service Assistance Directe uniquement (disponible sur abonnement). N’hésitez pas à contacter notre équipe commerciale à son sujet.

Discussions similaires

  1. gestion des threads
    Par yanis97 dans le forum Langage
    Réponses: 6
    Dernier message: 20/04/2006, 12h41
  2. Gestion des Threads
    Par Nalfouille dans le forum MFC
    Réponses: 3
    Dernier message: 05/04/2006, 16h29
  3. Gestion des threads
    Par yanis97 dans le forum C++
    Réponses: 6
    Dernier message: 08/03/2006, 09h39
  4. GEstion des thread
    Par Julien Dufour dans le forum Access
    Réponses: 8
    Dernier message: 06/10/2004, 14h28
  5. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40

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