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 :

nouveauté WD18 : message d'erreur si TimerSys() dans un thread. [WD18]


Sujet :

WinDev

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 76
    Points
    76
    Par défaut nouveauté WD18 : message d'erreur si TimerSys() dans un thread.
    Bonjour à tous,
    J'ai une fonction appelée par un Thread secondaire. Cette fonction attend un message dans une boucle "TANTQUE truc=false"
    Si ce message n'arrive pas, pour sortir de la fonction j'ai mis un TimerSys(,5 secondes) qui me positionne le flag "truc" à true et me permet ainsi de sortir du TantQue et donc de ma fonction.

    En WD15, WD16, WD17 : pas de pb. ça fonctionne nickel.
    Depuis WD18 : TimerSys() me renvoi 0 c'est à dire impossible de créer le Timer.

    j'ai remarqué que dans l'aide de WD18 ils ont rajouté ceci :
    Timer et Thread
    "Une procédure lancée par les fonctions Timer ou TimerSys à partir d'un thread secondaire (fonction ThreadExécute) ne sera pas appelée. En effet, un thread secondaire n'a pas d'interface (c'est-à-dire pas de fenêtre ouverte) : ce thread secondaire ne reçoit pas les messages du système (la "boucle de message") comme le thread principal de l'application."


    J'imagine que cela a un rapport !?...
    Qu'en pensez-vous ?

    Et quelle autre solution puis-je implanter pour sortir de ma fonction au bout de 5s si le message n'est pas arrivé ?

    merci de votre aide,

    Gilbert
    Merci de votre aide.
    Gilbert.

  2. #2
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    J'ai pas tout suivi mais en gros tu lance un thread qui soit attend un "truc" soit attend 5 seconde pour s'arrêter?
    Sans avoir plus d'info ni de code ça va être dur de t'aider mais perso si je veux influencer un thread j'utilise les fonctions SignalCrée/SignalModifie/SignalAttend/SignalDétruit
    Ainsi je peux gérer des événements dans mon thread.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 76
    Points
    76
    Par défaut
    oui, c'est ça. mais pour utiliser les fonctions Signalxxx sont bloquantes.
    Dans mon cas j'ai simplement besoin d'un astuce pour sortir de ma boucle au bout de 5 secondes.
    Le TimerSys fonctionnait très bien jusqu'à la WD18 !

    Gilbert.
    Merci de votre aide.
    Gilbert.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Bonjour,

    La fonction timersys doit être une simple interface de l'api windows (SetTimer / KillTimer ). Le fonctionnement est donc le même qu'avec la fonction Événement, où un handle est nécessaire pour indiquer à windows où envoyer l'information.
    La version 18 rétablie donc un fonctionnement correct par rapport aux API wndows.

    Pour contrôler le temps d’exécution de votre procédure vous pouvez plus simplement enregistrer l'heure avant le tantque et contrôler le temps passé avec la fonction HeureDifférence.

    Exemple rapide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    HDébut est une heure = HeureSys()
    TANTQUE truc=false
     SI HeureDifférence(HDébut , HeureSys()) > 500 ALORS
      ...
      SORTIR
     FIN
    FIN

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 303
    Points : 812
    Points
    812
    Par défaut
    Bonjour,

    D'après ton explication, truc est une variable globale, donc elle est accessible par le thread principal et les threads secondaires.

    Aussi, je te suggère simplement d'exécuter la procédure du TimerSys dans le thread principal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // lancer le thread secondaire
    ThreadExécute("Thread1", threadNormal, ProcédureThread)
     
    // Petite temporisation du thread principal pour laisser la main au thread secondaire
    ThreadPause(10)
     
    // Temporiser (5 secondes) le déclenchement de la procédure qui "bascule" la variable globale "truc"
    TimerSys("ProcédureBasculeTruc", 500)

  6. #6
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,
    Il me semble que signalattend peux avoir un paramètre de durée d'attente.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/10/2014, 19h47
  2. [Débutant] Message d'erreur filtre date dans requête
    Par Lendcap dans le forum VB.NET
    Réponses: 2
    Dernier message: 21/06/2012, 12h03
  3. Messages d'erreur de validation dans un panelBar
    Par flepretre dans le forum JSF
    Réponses: 5
    Dernier message: 19/11/2010, 14h11
  4. Messages d'erreur au demarrage dans le log de la jvm
    Par Elendhil dans le forum Glassfish et Payara
    Réponses: 6
    Dernier message: 15/12/2009, 17h05
  5. [POO] afficher un message d'erreur après passage dans une BD
    Par paolo2002 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/04/2008, 16h04

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