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 :

Calcul de temps restant [WD9]


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 33
    Points
    33
    Par défaut Calcul de temps restant
    Bonjour,

    Dans mon programme je traite des enregistrements (environ 100 000) cela me donne un traitement d'environ 25 minutes. J'ai donc inséré un calcul de temps restant. Mon problème c'est qu'il ne se calcule qu'une fois tout les 10 000 ans car les conditions ne sont pas respectées, alors qu'elles le devraient !

    Je pense que le code sera plus parlant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // Calcule le temps restant
     
    moy = (HeureDifférence(Temps_Départ, DateSys()) / Indice_Ligne) * (Indice_Fin-Indice_Ligne)
     
    // On commence à calculer à partir de 10 enregistrements
    SI Indice_Ligne >= 10 ALORS
    	SI moy > 0 ALORS
    		He = EntierVersHeure(moy)
    		SI HeureValide(He) ALORS
    			Lib_Temps_restant = HeureVersChaîne(He, "MM:SS")
    		FIN
    	FIN	
    FIN
    Pour expliquer les variables :
    _ moy correspond au temps qu'il reste en centième de seconde
    _ Temps_Départ est égal à DateSys() lors du commencement du premier enregistrement
    _ Indice_ligne est égal au nombre d'enregistrement effectué
    _ Indice_fin est égal au nombre d'enregistrement total
    _ He est une heure

    Merci de m'aider car ça marche quand il veut bien l'afficher mais a priori, l'heure n'est souvent pas valide... Je ne comprend pas pourquoi ni comment réparer ça.

    Merci d'avance

  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
    Si j'ai bien compris, parce que le code est incomplet, le code que tu nous montre est situé a l'intérieur de la boucle...

    Si c'est le cas, il te manque un multitache ou un fenrepeint pour permettre l'affichage pendant la boucle
    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
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    Non non, j'ai mis juste l'utile.
    Dans ma boucle j'ai évidemment un Multitache(-1) ainsi qu'un MultitacheRepeint(). Ça c'est ma fonctions AfficheTemps(), elle se situe dans ma fonction ActualiseTemps() qui comme sont nom l'indique, actualise le temps. La fonction ActualiseTemps() est appelé toute les secondes par un timer. et AfficheTemps(), qui calcule donc le temps restant est appelé par la fonction ActualiseTemps() toutes les 5 secondes car on mes a jours le calcul de l'heure toutes les 5 secondes.
    Je précise que ma fonction de calcul est bien appelé toutes les 5 secondes.

    Compris? ^^
    Je sais c'est pas très clair

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Je comprends pas tout : tu appelles une fonction de calcul toutes les secondes qui appelle une fonction pour rafraichir des données toutes les 5 secondes ???

    ActualiseTemps() ne fait que des calculs ?
    Mieux vaut un petit lien qu'un long discours.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    ActualiseTemps() j'ai en quelque sorte un -1 au temps affiché.
    Et pour l'actualisation toutes les 5 secondes j'ai ça (qui marche très bien) dans ma fonction ActualiseTemps() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Goo++
     
    // Toutes les 5 secondes on recalcule le temps restant
    SI Goo >= 5 ALORS
    	AfficheTemps()
    	Goo = 0
    FIN

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Tu as essayé de faire un trace de HeureVersChaîne(He, "MM:SS") ?

    Sinon au lieu de faire un HeureVersChaîne(He, "MM:SS") tu peux mettre ton libellé en type Heure (dans la description) et passer directement He.
    Mieux vaut un petit lien qu'un long discours.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    Ça c'est bon, c'est pas ça qui coince.
    Ce qui coince c'est le He = EntierVersHeure(moy)
    Car si j'enlève la validité de l'heure, il me dis que l'heure n'est pas valide...

    En fait, le truc c'est de savoir comment faire les calcules sur l'heure et pouvoir l'afficher ensuite sans qu'il me disent que c'est pas une heure valide.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Citation Envoyé par Floco Voir le message
    Non non, j'ai mis juste l'utile.
    Peut-être que le problème vient du reste du code !

    Si tu mets un point d'arrêt sur le calcul de moy (bizzare comme nom de variable, mais bon), quelles sont les valeurs des différentes variables ?

    Autre remarque, est-ce que la variable Goo est une variable globale ?

    Tatayo.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    Oui Goo est une variable global.

    Pour le reste :

    Avant j'avais fait un calcul de temps dans la fonction AfficheTemps() qui calculais le temps mis par le dernier enregistrement et je le multipliais par les enregistrements restants et l'affichait. Tout ça marchais marchais parfaitement bien sauf que si on avait un enregistrement long, il ne se basait que sur celui là pour les 5 secondes à venir et ça donnais un temps très long comparé au temps réel.
    J'ai donc voulu faire un algo qui calculerais le temps restant en faisant des moyennes des temps passés par enregistrements. D'où le nom moy. Mais ça marchais pas bien, alors j'ai décidé de faire ce que je t'es montré, qui en gros avant de le multiplier par le nombre d'enregistrement restant, calcul la moyenne de temps de traitement d'un enregistrement. Et je n'est pas changé le nom des variables, car trop la flemme


    Donc pour le reste du code, ça ne viens pas de là. C'est juste le code que j'ai mis dans le premier post qui ne marche pas bien.
    A mon avis, ça commence a devenir faut, quand je manipule les centièmes de secondes...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Dans moy tu fais des calculs avec des types différents.

    Si tu essayes de faire la différence d'heure dans une variable de type heure, ensuite tu fais un d'abord un HeureVersEntier pour calculer la moyenne et là tu fais un EntierVersHeure pour récupérer le temps restant ?
    Mieux vaut un petit lien qu'un long discours.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    Je vais essayer mais dans l'aide Windev il est clairement mis que la fonction HeureDifférence() renvoie un entier qui correspond à la différence exprimé en centième de seconde.


    Edit : je viens de testé et Windev me dis bien que le résultat de HeureDifférence() est un entier et que HeureVersEntier() dois contenir une heure et non un entier...

  12. #12
    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
    Sans le code en entier je laisse tomber c'est trop incomplet pour être compréhensible.
    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

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 410
    Points : 513
    Points
    513
    Par défaut
    Salut
    Pourquoi tu utilise DateSys() au lieu de HeureSys() ?

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    Le reste du code ne sert à rien puisqu'il gère les enregistrements et que ceci viens juste d'un Timer donc il est totalement indépendant du reste du code si ce n'est pour les variables Temps_Départ, IndiceFin et IndiceLigne.

    Si tu veux, je te mes le code de la fonction ActualiseTemps() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    // On évite de faire des -1 -2 -3... si le temps n'a pas encore été calculé
    	SI Lib_Temps_restant <> "" ET Lib_Temps_restant <> "Calcul du temps restant....." ALORS
     
    		// Gestion de l'arrivage à 0, pour évité les -1, -2...
    		SI ExtraitChaîne(Lib_Temps_restant, 2, ":") = "0" OU ExtraitChaîne(Lib_Temps_restant, 2, ":") = "00" ALORS
    			SI Val(ExtraitChaîne(Lib_Temps_restant, 1, ":")) = 0 ALORS
    				Lib_Temps_restant = "0:00"
    			SINON
    				Lib_Temps_restant = Val(ExtraitChaîne(Lib_Temps_restant, 1, ":"))-1 + ":59"
    			FIN	
    		SINON
     
    			// On réduit d'une seconde le temps restant
    			SI (Val(ExtraitChaîne(Lib_Temps_restant, 2, ":"))-1) >= 0 ET (Val(ExtraitChaîne(Lib_Temps_restant, 2, ":"))-1) <= 9 ALORS
    				Lib_Temps_restant = ExtraitChaîne(Lib_Temps_restant, 1, ":") + ":0" + (Val(ExtraitChaîne(Lib_Temps_restant, 2, ":"))-1)	
    			SINON
    				Lib_Temps_restant = ExtraitChaîne(Lib_Temps_restant, 1, ":") + ":" + (Val(ExtraitChaîne(Lib_Temps_restant, 2, ":"))-1)	
    			FIN
    		FIN	
    	SINON
    		Lib_Temps_restant = "Calcul du temps restant....."
    	FIN
    	Goo++
     
    	// Toutes les 5 secondes on recalcule le temps restant
    	SI Goo >= 5 ALORS
    		AfficheTemps()
    		Goo = 0
    	FIN

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    Merci Basam95 !!!!!!!!

    Je voulais mettre HeureSys()... Je suis sûr que c'est ça qui faisait tout foirer...

    Je test et je vous dis

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    Bon ba un merci basam95 (et au autre aussi ), c'était juste une faute de frappe

    Maintenant ça marche nikel !

    Topic résolu.

    Merci à tous et bonne journée !

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

Discussions similaires

  1. comment calculer temps restant
    Par ouiouioui dans le forum Langage
    Réponses: 6
    Dernier message: 15/07/2015, 15h02
  2. Synchronisation et calcul de temps restant.
    Par milach dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 20/03/2013, 14h46
  3. Calculer le temps restant
    Par miss_socrates dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/11/2012, 10h06
  4. Calcul de temps restant d'un processus
    Par milach dans le forum C++
    Réponses: 4
    Dernier message: 29/11/2010, 16h12
  5. calculer le temps restant
    Par Jeannotc dans le forum Langage
    Réponses: 22
    Dernier message: 18/11/2009, 11h10

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