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 :

Eviter le freeze de l'appli


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut Eviter le freeze de l'appli
    Bonjour,

    je passe par une fonction qui à certains moments prend du temps *10-20 sec*.
    Le soucis c'est qu'elle bloque mon appli, je ne peux plus rien en faire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Etat_Chambre = ConnexionAutomate(Communication.Ethernet, "192.168.0.1")
    ' bloque mon programme le temps de voir que l'automate n'est pas connecté
    j'aimerais savoir si on ne peux pas éviter le freeze de l'appli.
    j'ai essayé avec un "Aplication.DoEvents()"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.DoEvents()
    Etat_Chambre = ConnexionAutomate(Communication.Ethernet, "192.168.0.1") 
    Application.DoEvents()
    mais pas concluent comme résultat

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Bonjour,

    jette un oeil sur l'utilisation de background worker ou thread

  3. #3
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Bonjour,

    Application.DoEvents ne te sert à rien dans ton cas. D'une part il ne sert pas à "fluidifier" le programme, et de plus comme le code est itératif, le code va arriver sur la ligne qui "freeze", il va freezé, et après seulement il passe a la ligne suivante.

    Donc comme l'a dit notre ami, fait des recherches du coté des threads.
    Soit tu te le créer tout seul (plus compliqué), soit tu utilises le backgroundworker (c'est un thread facile d'utilisation).

    Par contre si tu utilises le backgroundworker, et que le traitement qu'il a a faire est lourd... sache que ton PC va freezer quand même. Car windows alloue beaucoup trop de mémoire ram au background worker, et au final, ca va freezer quand même. Mais si le traitement est léger alors c'est bon.

  4. #4
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    Par contre si tu utilises le backgroundworker, et que le traitement qu'il a a faire est lourd... sache que ton PC va freezer quand même. Car windows alloue beaucoup trop de mémoire ram au background worker, et au final, ca va freezer quand même. Mais si le traitement est léger alors c'est bon.
    D'où sors-tu cela ?
    Le taille par défaut de la pile est de 1Mo. En quoi cela va t-il faire ramer le programme ? Et quel rapport avec la durée d'exécution du thread ?
    Je crois que tu as de fausses idées sur le background worker et que tu es assez confus.

  5. #5
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Merci pour l'idée asmduty

    j'ai regardé pour faire un petit Thread,
    ça l'air de pas mal tourner maintenant

    Voila le petit bout de code qui va bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports System.Threading
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub ProcLectureAPI()
        'Code pour l'exécution
        Etat_Chambre = Nothing
        Etat_Chambre.Redim_DB_Bits(7)
        Etat_Chambre = ConnexionAutomate(Communication.Ethernet, "192.168.0.1")
    End Sub
    J'appel le code à exécuter dans le thread qui va bien
    *pour moi c'est à chaque Tick du Timer*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ' Appel du Thread
    Dim ThreadLectureAPI As New Thread(AddressOf ProcLectureAPI)
    ThreadLectureAPI.Start()

  6. #6
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    D'où sors-tu cela ?
    Le taille par défaut de la pile est de 1Mo. En quoi cela va t-il faire ramer le programme ? Et quel rapport avec la durée d'exécution du thread ?
    Je crois que tu as de fausses idées sur le background worker et que tu es assez confus.
    Et bien par expérience... J'avais un traitement d'adresse (plusieurs centaines de millions de lignes), j'ai dans un premier temps utiliser le background worker, et ça a donné le résultat que j'ai dis.

    J'ai essayer avec un thread normal... mon appli ne freezai plus du tout.

    Alors peut être que je m’égare, tout du moins que mes conclusions sont faussent, mais le résultat de l’expérience fut là.

  7. #7
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    Alors peut être que je m’égare, tout du moins que mes conclusions sont faussent, mais le résultat de l’expérience fut là.
    A mon avis le problème devait effectivement être ailleurs. Pour ce que j'en sais un background worker n'est qu'un thread comme les autres.

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

Discussions similaires

  1. Soulager le programme pour eviter les freezes
    Par fennec62 dans le forum Tkinter
    Réponses: 18
    Dernier message: 26/08/2014, 15h33
  2. [C#] Freeze appli multi-thread
    Par convexe dans le forum C#
    Réponses: 1
    Dernier message: 10/03/2010, 14h33
  3. Réponses: 6
    Dernier message: 21/03/2009, 16h29
  4. fenetre d'une appli openGl-MFC qui freeze !
    Par jcloupgarou dans le forum Développement 2D, 3D et Jeux
    Réponses: 12
    Dernier message: 28/07/2006, 11h19
  5. [wxPython][ProgressDialog] Appel de l'appli qui freeze
    Par Guigui_ dans le forum wxPython
    Réponses: 1
    Dernier message: 08/12/2005, 18h25

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