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

VB.NET Discussion :

PB ajout d'une durée à un instant t


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    autre
    Inscrit en
    Septembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : autre
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2015
    Messages : 35
    Points : 22
    Points
    22
    Par défaut PB ajout d'une durée à un instant t
    Bonjour,

    je viens vers vous avec un petit problème dont je ne trouve pas de solution...

    J'utilise un timer et j'aimerais appelé des procédures à un instant précis.
    Voici mon code:

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Private Sub LANCER_Click(sender As Object, e As EventArgs) Handles LANCER.Click
     
     
            Timer1 = New Timers.Timer
     
            ' déclaration de l'heure h de lancement.
     
            temps = Format(Now, "HH:mm:ss")
     
            'délai en millisecondes du déclenchement de chaque action du tick.
     
            Timer1.Interval = 500
     
            'active le timer.
     
            Timer1.Enabled = True
     
            Timer1.Start()
     
     
        End Sub
     
     
        Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Elapsed
     
     
     
            temps = Format(Now, "HH:mm:ss")
     
            ' teste l'heure toutes les 1s / boucle tous les 1s
     
            temps = DateAdd(DateInterval.Second, 1, temps)
     
            Select Case temps
     
               Case "09:37:05" : Call test1() 
     
                    Timer1.Stop()
                    Timer1.Enabled = False
     
            End Select
     
     
        End Sub
    avec l'heure fixe ça fonctionne mais je voudrais remplacer le "09:37:05" par temps + timevalue("00:00:05") où temps est le moment où j'ai cliqué sur le bouton et ("00:00:05") représente 5 secondes après l'instant du clic en variable.

    5 secondes est un exemple ce serait plus quelque du genre 54min et 41sec...

    Je vous remercie pour l'aide que vous pourriez m'apporter!

    Cordialement,

    Innuendo67.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    L'idée sur laquelle je partirais serait plutôt de définir l'Interval du timer sur le clique du bouton de lancement, avec la durée demandée (pas 500ms) puis de lancer immédiatement le timer, ainsi dans l'event Tick Elapsed il suffit de faire le traitement de fin du timer.
    En tout cas, présenté comme ça, je ne vois pas l'intérêt de déclencher d'utiliser le tick toute les 1/2 secondes et de vérifier si on est à la bonne heure... après j'ai peut être pas tout compris.

    Bon code,
    J@ck.

    [EDIT] désolé j'ai confondu l'event Tick et Elapsed.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  3. #3
    Membre à l'essai
    Homme Profil pro
    autre
    Inscrit en
    Septembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : autre
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2015
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Bonjour J@ckHerror et merci de me répondre.

    Si j'ai bien compris ton idée cela voudrais dire que je devrais créer un timer pour chaque temps à rajouter. En effet, j'ai plusieurs déclenchement sur le même timer d'où mon case. Je ne l'avais pas précisé. Je creuse du côté timespan. Temps + timespan marche hors tick mais pas dans, je ne comprends pas pourquoi.

    Merci.

    Cordialement

    Innuendo67

  4. #4
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Bonjour

    regarde la class TimeSpan

    Ce n'est pas très clair
    Tu as plusieurs procédures ex proc1,proc2 proc3 et tu veux que proc1 soi appellé après 45 min 12 sec et proc 2 après m min s sec et proc3 après .....
    Quand proc3 est executé Tu stop le timer ou tu recommences le cycle.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Tout comme @shayw, dis nous ce que tu veux faire, complètement et avec les détails.
    Tu as toujours le même nombre de durée ? tu as un nombre max/min de durée ? Chaque durée doit aboutir à une tache, toujours la même, une tache par durée, les taches doivent être toujours dans le même ordre ou les taches sont lié à une durée ?? Que se passe-t-il si j'ai 2 durées identiques ... etc ?? etc
    Précise le contexte aussi.

    Suivant tes réponses les solutions peuvent être complètement différentes.

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  6. #6
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Tout d'abord, je t'invite à lire l'article que j'ai écris sur la mise en place de tâches périodiques. Plusieurs éléments devraient t'intéresser pour répondre à ton problème :
    • la notion de dérive des horloges (je ne sais pas si tu sais ce que c'est, mais si ce n'est pas le cas, alors lit l'article car ton code en souffre !)
    • le déclenchement d'une action à une date donnée, en utilisant des threads et en calculant la durée à attendre.


    Maintenant, comme le souligne J@ckHerror, dit nous précisément ce que tu souhaites faire. Place nous dans le contexte et présente nous un cas d'utilisation simple mais représentatif. Pas de code, juste des mots !
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  7. #7
    Membre à l'essai
    Homme Profil pro
    autre
    Inscrit en
    Septembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : autre
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2015
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Bonjour et merci à tous de vous attarder sur mon problème.

    Pour faire simple, shayw a bien résumé mon souci.

    J'ai 4 appareils à piloter (envoi de commande dans des procédures distinctes).
    Pour l'instant je m'attarde sur un timer (ou autre si cela est possible) mais il y en aura 4 in fine qui tourneront dans l'appli.

    Je clique sur un bouton ce qui me donne mon heure de début. Ensuite, à partir de cette heure de début, j'appelle des procédures (plusieurs fois et des différentes) après un délai voulu fixe (en vba j'avais fait un application.ontime h + timevalue qui fonctionnait à merveille).

    En gros j'ai : h = heure du clic
    puis: proc1 à h + x
    proc2 à h + y
    proc3 à h + z
    .
    .

    jusqu'à la dernière procédure où x,y et z sont des temps du genre 55mins et 35s ou 1h 32 et 24s....


    Je ne sais pas si je m'exprime correctement.

    Je vous remercie encore de vos réponses.

    Cordialement,

    Innuendo67

  8. #8
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Dans ce cas, pas besoin de timer. Il suffit de déclencher les événements dès le clic sur le bouton. Ensuite, dans chaque événement, tu attends le temps nécessaire pour simuler un départ à l'instant choisi.

    Exemple :

    Code c# : 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
     
    void LANCER_Click(object sender, EventArgs e)
    {
       DateTime start = DateTime.Now;
     
       TimeSpan tache1Offset = new TimeSpan(1,0, 0); // Délai de 1h
       Task.Run(() => {
          int wait = Convert.ToInt32((date - DateTime.Now).TotalMilliseconds);
          await Task.Delay(wait);
          Tache1();
       });
     
       TimeSpan tache2Offset = new TimeSpan(0, 52, 38); // Délai de 52min et 38s
       Task.Run(() => {
          int wait = Convert.ToInt32((date - DateTime.Now).TotalMilliseconds);
          await Task.Delay(wait);
          Tache2();
       });
     
       ...
    }

    L'exemple est en C# car je ne connais pas le VB. Mais le principe reste exactement le même
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  9. #9
    Membre à l'essai
    Homme Profil pro
    autre
    Inscrit en
    Septembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : autre
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2015
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Bonjour et merci pour cette piste.

    Cependant votre wait en c semble être un thread.sleep en vb ce qui gèlerait mon appli. La solution serait du multi thread bien compliquée pour moi...

    N'est ce pas possible de remplacer "hh:mm:ss" qui fonctionne avec mon case par un heure h + x??

    Merci

    Innuendo67

  10. #10
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Await est disponible en VB

    Sinon, effectivement, Thread.Sleep et Task.Delay font fonctionnellement la même chose (attendre un délai), même s'il y a des différences techniques subtiles.

    Citation Envoyé par innuendo67
    La solution serait du multi thread bien compliquée pour moi...
    Regarde de plus près, tu verras que la solution que je te propose est multithread, et donc que cela ne gèlera pas ton appli.

    Citation Envoyé par innuendo67
    N'est ce pas possible de remplacer "hh:mm:ss" qui fonctionne avec mon case par un heure h + x??
    Dans un case non, car case attend des constantes. Tu dois contourner le problème en utilisant une suite de conditionnel if... then... else...
    Ensuite, tu dois éviter le phénomène de dérive des horloges.
    Au final, cette solution me semble bien plus compliquée et lourde à mettre en oeuvre comparé à l'usage de threads...
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

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

Discussions similaires

  1. [AC-2007] Ajout d'une durée de 12:00 lors d'un import de fichier Excel
    Par lbrun79 dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/06/2015, 13h52
  2. [AC-2010] Requête ajout d'une durée à une date
    Par Manon.ge dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 14/04/2011, 05h18
  3. ajouter une durée à date de départ
    Par Stéph utilisateur d'acces dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/05/2008, 18h54
  4. Ajouter une durée à une date
    Par agllid dans le forum WinDev
    Réponses: 2
    Dernier message: 20/08/2007, 11h54
  5. [SQL] Ajouter une durée à une date et obtenir une date valide
    Par bigltnt dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/06/2007, 14h55

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