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 6 et antérieur Discussion :

[VB6] Faire tourner une appli en tache non bloquante


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut [VB6] Faire tourner une appli en tache non bloquante
    Bonjour à tous !

    Je développe en VB6 des tableaux de bords qui permettent de générer des documents Excel, PowerPoint ...

    Lorsque je manipule Powerpoint il arrive de temps en temps qu'un message d'erreur apparaisse disant "Serveur Occupé".

    Un collègue à développer une petite application qui toutes les 5 minutes vérifie si une fenetre "Serveur Occupé" est apparu est force sa fermeture (Validation du bouton "Réessayer")

    Le probleme vient du fait qu'on utilise un timer dans un boucle While et j'ai l'impression que le fait d'etre dans un boucle While le processeur est occupé à 100% pendant les 5 minutes d'attente.

    J'aimerais donc savoir si il existe une possibilité de générer une boucle infinie, qui effectue une action simple à intervalle régulier et ce sans "bouffer" toutes les ressources du processeur.

    Nous avons essayer d'utiliser un timer, d'utiliser la fonction sleep mais dans tous les cas le processeur de la machine tourne à 100% ce qui affecte énormément le processus principal de génération du tableau de bord.

    J'espere avoir reussi a exposer mon probleme convenablement

    Merci d'avance de vos réponses

    @+

    Hirochirak

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tiens, avec timer l'UC n'est occupée que ponctuellement et "qu'à" 40%
    Tu peux essayer... (tu modifies, tu n'auras pas "Application" c'est du VBA)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub JeFaisTourner()
        'Relance la pendule (mise à jour de OnTime) toutes les 10 secondes
        For i = 1 To 50: Beep: Next
        Application.OnTime Now + TimeValue("00:00:10"), "JeFaisTourner"
     
    End Sub
    pour l'arrêter, tu supprimes la macro !

    A+

  3. #3
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    ousk, ca, c'est du VBA, non compatible avec VB6, l'objet du post

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par Ousk' a prévenu et
    (tu modifies, tu n'auras pas "Application" c'est du VBA)
    C'était pour l'idée, pas pour le code Salut Thierry, tu nous es revenu ?

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    OK !!!

    En fait j'ai deja essayer avec un timer et ca bouffe vraiment enormement de temps processeur.

    Mon probleme vient du fait que pour générer mes tableauxde bord j'utilise une fonction qui analyse des onglets Excel de données brutes.

    Or pour effectuer l'analyse il est necessaire de parcourir chaque ligne de données.

    C'est tout de meme bizarre, le fait de faire un sleep ou d'utiliser un timer a l'air de bloquer l'application de tableau de bord.

    @+

    Hirochirak

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    Pour faire un réup et après avior réfléchi au probleme j'ai une idée mais je sais pas si c'est possible.

    Est il possible d'écrire un processus dormant c'est à dire garder un processus qui sommeil et qui se réveille à un interval de temps qu'on définie.

    Le but serait que le processus soit lancer dans la liste des taches mais qu'il n'est aucune ou une très faible incidence sur les performances.

    Ensuite via un timer ou tout autre solution, le processus se reveille effectue son action et se rendort.

    Je ne suis pas un spécialiste de ce genre de probleme donc je me permets de vous appeler au secours

    Merci d'avance de vos réponses

    @+

    Hirochirak

  7. #7
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Dans un module standard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Declare Function SetTimer Lib "user32" _
        (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, _   ByVal lpTimerFunc As Long) As Long
    Declare Function KillTimer Lib "user32" _
        (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
     
    Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, _
        ByVal uElapse As Long, ByVal lpTimerFunc As Long)
    Dim rep As Integer
        rep = MsgBox("Interrompre la tache" & TimerID & " ? ", vbYesNo)
        If rep = vbYes Then
            Unload Form1
        End If
    End Sub
    Dans une form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_Load()
        SetTimer Me.hwnd, 1, 5000, AddressOf TimerProc
        Me.Hide
    End Sub
     
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        KillTimer Me.hwnd, 1
    End Sub
    en espérant que cela réponde à ton attente

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    Et bien la réponse était plus simple (désolé d'etre une bille)

    En fait la pause dans le programme ne se lancer que dans certain cas alors qu'elle doit se faire a chaque boucle.

    Probleme resolu en deplacant la fonction sleep

    Merci bcp de vos réponses je pense que j'ai encore des choses a tester pour ameliorer le processus.

    @+

    Hirochirak

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

Discussions similaires

  1. Faire tourner une appli XP sur W7
    Par pierrot67 dans le forum Débuter
    Réponses: 4
    Dernier message: 07/09/2012, 14h28
  2. faire tourner une appli .NET avec une référence manquante
    Par Nico57 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/03/2012, 16h36
  3. Faire tourner une GtkDialog en tache de fond
    Par Gamall dans le forum GTK+ avec C & C++
    Réponses: 19
    Dernier message: 15/09/2010, 18h23
  4. Faire tourner une Application en Taches de fond
    Par ArkAng3 dans le forum MFC
    Réponses: 3
    Dernier message: 26/08/2005, 15h06

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