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 :

Déclencher des appels de fonctions à heure fixe


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Tchicken
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Août 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Août 2017
    Messages : 108
    Par défaut Déclencher des appels de fonctions à heure fixe
    Bonjour à tous,

    je mets en place un exe sur un serveur qui travaille en mode console , je déclenche des fonctions à heures fixes avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Sub Main()
            Dim heure_actuelle As String
            Do
                heure_actuelle = CStr(Now.ToLongTimeString)
                Select Case heure_actuelle
                    Case "07:00:00", "08:00:00", "09:00:00", "10:00:00", "11:00:00", "12:00:00", "13:00:00", "14:00:00", "15:00:00",
                         "16:00:00", "17:00:00", "18:00:00", "19:00:00", "20:00:00", "21:00:00", "22:00:00", "23:00:00", "23:55:00"
                        Call Gestion.GestionServiceJour()
                    Case "16:30:00", "18:30:00", "20:30:00", "22:30:00", "23:30:00"
                        Call Gestion.GestionServiceLendemain()
                End Select
            Loop
        End Sub
    Cela consomme énormément de temps CPU, comment pourrais-je coder cela à l'aide d'une Classe Timer ou équivalente ?

    D'avance merci de votre aide, Tchicken.

  2. #2
    Membre émérite
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 736
    Par défaut
    Bonjour,

    Effectivement, si tu boucles là-dessus çà va consommer tout le CPU !
    Le timer serait une bonne solution, mais une question se pose, combien de temps durent les traitements que tu appelles ?

    Je vois 2 solutions avec le timer :

    - Si les traitements sont très courts, tu fais en sorte qu'il se déclenche toutes les mn, et si tu atteints une heure désirée (oublie les secondes...), tu lances le traitement, puis tu relances le timer.

    - Si les traitements sont plus ou moins long, le mieux est de calculer le temps d'ici le prochain déclenchement nécessaire, et le mettre en valeur dans le timer. Comme çà le prochain appel se fait à l'heure désirée et tu utiliseras le moins de CPU possible en plus, puisque le timer ne se déclenchera que quand il le faut.
    Au départ tu fixes la valeur de l'intervalle entre maintenant et le prochain appel, puis ce sera après exécution d'une des procédures que tu lances, que tu appelleras la même routine de calcul de l'intervalle.
    Attention au passage au changement de date à minuit.

    Personnellement je préfères nettement la 2ème solution.

  3. #3
    Membre confirmé Avatar de Tchicken
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Août 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Août 2017
    Messages : 108
    Par défaut
    Bonjour et merci m4k-Hurrican,

    j'ai modifié ma gestion des HMS en HM comme vous le suggériez et utilisé Thread.Sleep() avec une gestion du changement d'heure :

    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
        Sub Main()
            Dim heure_actuelle As String
            Do
                heure_actuelle = CStr(Now.ToShortTimeString)
                Select Case heure_actuelle
                    Case "07:00", "08:00", "09:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00",
                         "16:00", "17:00", "18:00", "19:00", "20:00", "21:00", "22:00", "23:00", "23:55"
                        Call Gestion.GestionServiceJour()
                    Case "16:30", "18:30", "20:30", "22:30", "23:30"
                        Call Gestion.GestionServiceLendemain()
                    Case "00:00"
                        'Pause de 00H00 à 7H00 => 25200000
                        'Pause de 00H00 à 6H59 => 25140000
                        Threading.Thread.Sleep(25140000)
                    Case "01:00" 'Si changement heure + 1 (changement heure - 1 sans impact)
                        'Pause de 01H00 à 7H00 => 21600000
                        'Pause de 01H00 à 6H59 => 21540000
                        Threading.Thread.Sleep(21540000)
                End Select
                'Pause d'une minute => 60000
                Threading.Thread.Sleep(60000)
            Loop
        End Sub
    Ca semble plus facile à gérer qu'un Timer.

  4. #4
    Membre émérite
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 736
    Par défaut
    C'est une solution, OK, mais elle comporte quelques défauts.

    Que se passe t-il si ta routine "GestionServiceJour" lancée à 23h55 tourne au moins 5mn ?
    Tu vas attendre au moins encore 1 minute (sleep), et ton test de "00:00" ne passera jamais.

    Et le script va tourner toutes les minutes, inutilement la plupart du temps.
    Alors que le timer avec calcul de l'intervalle de prochain appel est infaillible, et consommateur de 0 cpu, jusqu'à ce qu'il y ait besoin d'appeler la routine.

    Maintenant c'est ton programme, donc tu fais ce que tu veux hein.

  5. #5
    Membre confirmé Avatar de Tchicken
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Août 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Août 2017
    Messages : 108
    Par défaut
    merci m4k-Hurrican pour ton suivi,

    les fonctions appelée ne dépassent pas la minute en temps de traitement.

    Mais si tu as un exemple de Timer documenté sous la main, je me pencherai dessus et posterai le résultat.

    Merci

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

Discussions similaires

  1. Perte de fonctionnement des appels de fonction dans le cas d'un appel ajax
    Par comme de bien entendu dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/06/2021, 08h09
  2. Gérer l'ordre des appels de fonctions
    Par Jessyv96 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/11/2018, 15h41
  3. Réponses: 1
    Dernier message: 27/11/2010, 15h24
  4. des appel de fonction(paramétre, référence )
    Par aefmaaradji dans le forum C++
    Réponses: 2
    Dernier message: 12/04/2009, 13h32
  5. Remplir des listes à partir d'appels de fonction
    Par nickoko dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/07/2006, 10h17

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