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 :

Timer qui bloque application [WD11]


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Timer qui bloque application
    Bonjour,

    J'utilise un timer appelant toutes les secondes la procédure globale Horloge().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SI Timer("Horloge", 100, 1) = 0 ALORS
    	Erreur("Création du timer impossible")
    FIN
    Cette procédure me permet d'exécuter une autre procédure selon l'heure de la journée.
    Seulement, ce timer fait planter mon application. Je sais que c'est lui le responsable du plantage car lorsque je le mets en commentaire, tout fonctionne correctement.

    Avez-vous une idée d'où cela peut venir et de la solution que je pourrais y apporter?

  2. #2
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    ça veut dire quoi planter ? Y a t'il un message d'erreur ou c'est figé ? dans les deux cas il faudrait essayer de déterminer où.

    De plus ce serait bien de voir la procédure horloge.. Elle dure combien de temps ?
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    L'application se fige et lorsque l'on veut agir sur le programme (clic ou autre), un message d'erreur apparaît "PC Soft ne répond plus"

    La procédure Horloge() dure au maximum 4min si l'heure correspond à une heure où la procédure Test() doit être appelée.

    Voici le code de Horloge()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PROCEDURE Horloge()
    i est un entier
    DureeTest est un entier
     
    POUR i=1 A HNbEnr(PlageHoraire)
    	HLitRecherchePremier(PlageHoraire,NomPoste,FEN_StationGSM.COL_NomPoste1[i])
    <div style="margin-left:40px">SI (Milieu(HeureSys(),1,2))=(Gauche(PlageHoraire.HeureDebut,2)) ALORS</div><div style="margin-left:40px"><div style="margin-left:40px">SI Milieu(HeureSys(),3,2)=00 ALORS</div></div><div style="margin-left:40px"><div style="margin-left:40px"><div style="margin-left:40px">Test(FEN_StationGSM.TABLE_PlageHoraire.COL_NomPoste1[i])</div></div></div><div style="margin-left:40px"><div style="margin-left:40px">FIN</div></div><div style="margin-left:40px">FIN</div>FIN

  4. #4
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    Peux tu ne pas utiliser la fonction timer et utiliser plutôt les paramètres de ta procédure (timer automatique à définir a droite de l'entete de la procédure) ?
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  5. #5
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Bonjour

    Tu devrais commencer par arrêter le timer à l'entrée de la procédure Horloge, puis le réactiver en sortie

    Ensuite il vaut mieux utiliser TimerSys plutôt que Timer

    Citation Envoyé par Aide de Windev
    Conseil : Dans la majorité des cas, utilisez la fonction TimerSys.
    En effet, la fonction Timer consomme plus de ressources que la fonction TimerSys et ne fonctionne que lorsque des fenêtres WinDev sont en cours (le timer s'arrête si une boîte de message est affichée).

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    hpascal, j'ai déjà essayer le TimerSys au lieu du Timer mais cela ne fait aucune différence. J'ai tenté d'arrêter le timer à l'entrée de Horloge(), puis de le réactiver en sortie mais le bug se fait encore plus rapidement.

    mogwai162, j'ai compris que tu voulais éviter d'appeler la fonction Timer mais je ne vois pas comment faire pour utiliser un timer automatique...
    Je vais chercher dans la doc en attendant.

    Merci de vos réponses.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    C'est bon j'ai trouvé comment utiliser un timer automatique dans une procédure.
    Je teste.

  8. #8
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Juste une remarque :
    Si la procédure appelée peut durer 4 minutes c'est normal que l'application se fige, ce n'est pas lié au timer

    Tu peux la lancer dans un thread secondaire pour éviter ça et si c'est possible dans le contexte de ton application

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    L'application peut se figer dès son ouverture alors que l'heure n'est pas une heure où la procédure Test() (qui peut durer jusqu'à 4 mn) est appelée.

    Et le problème persiste avec le timer automatique...

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    J'ai paramétré la procédure pour qu'elle s'exécute en tâche de fond (thread) via ses propriétés. Je teste de nouveau.

  11. #11
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Citation Envoyé par ivichou Voir le message
    J'ai paramétré la procédure pour qu'elle s'exécute en tâche de fond (thread) via ses propriétés. Je teste de nouveau.
    Dans ce cas pense a arrêter le timer en entrée
    Pour le relancer il faut le faire à la fin de la procédure qui est lancée dans le thread secondaire

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Bon j'ai laissé l'application tournée toute la nuite et aucun bug, plusieurs tests se sont effectués sans problème.
    Merci

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

Discussions similaires

  1. Application.OnTime qui bloque avec du code validé sur d'autres topic
    Par tmlpqsdpmdlc dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/04/2015, 14h11
  2. Problème de readLine() qui bloque mon application
    Par critok dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 15/08/2012, 21h20
  3. Timer qui ne bloque pas l'interface
    Par arketip dans le forum Général Python
    Réponses: 1
    Dernier message: 14/04/2009, 19h55
  4. Méthode qui bloque l'application
    Par Mister Nono dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2008, 11h44
  5. Réponses: 6
    Dernier message: 21/03/2005, 13h22

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