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

C# Discussion :

Mettre en pause une boucle for (algo de tri)


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Par défaut Mettre en pause une boucle for (algo de tri)
    Salut !

    J'ai découvert il y a déjà un petit bout de temps, une comparaison d'algorithme de tri : http://m.9gag.com/gag/aPyoG4P
    Je trouve ca vraiment sympa et j'ai donc voulu le refaire en C#, question d'aussi apprendre ces algo.

    Mais me voilà confronté à un "problème", enfin, cela fonctionne, mais j'aimerais avoir le même rendu que sur ce GIF, c'est a dire que l'on puisse voir les étapes de l'algo sur le chart control.

    Je prends l'algo du tri par bulle, deux boucles for : Pour un PC avec 200 éléments cela ce fait instantané ^^ ! Et j'ai donc voulu bloquer ces deux boucles for en mettant un System.Threading.Thread.Sleep(50);, question de voir les étapes.

    Mais forcement, cette ligne de commande bloque complément mon appli, c'est le but du sleep ^^ ! Vous n'avez pas une idée de comment faire ?

    Comment puis-je arriver a voir les étapes de mes algo ?

    Merci

    (Je pense qu'il faudra que je fasse du multi-thread, mais si vous avez autre chose )

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    Si t'utilises la dernières version du framework avec async await tu peux exécuter ton tri de façon asynchrone et même suivre la progression : http://blogs.msdn.com/b/dotnet/archi...sync-apis.aspx

    SI t'es sur une ancienne version tu peux faire ça avec un backgroundworker : http://www.codeproject.com/Tips/8331...ogressBar-demo

    Tu peux aussi chronométrer le temps d’exécution de tes tâches avec stopwatch : https://msdn.microsoft.com/fr-fr/lib...vs.110%29.aspx et stocker le temps que met chaque tache pour les afficher par la suite.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Par défaut
    Super merci ! Je vais regarder ca

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Par défaut
    Salut !

    J'ai maintenant deux algo de tri opérationnel, enfin presque : le tri par bulle et le shell sort.

    Bon je n'ai "pas voulu" utiliser le systeme de la 4.5 mais plutot le BackGroundWorker.

    Mais j'ai quelque soucis car j'utilise (pour stopper mon algo et voir le resultat (entre deux swap par exemple)) le System.Threading.Thread.Sleep(20);.
    J'ai vu ceci dans le lien que tu m'avais donné !

    Mais du coup en faisant cela, le shell sort stop mon tri par bulle et vice versa. Et pire encore, le tri par bulle se voit sur mon Chart Control de mon Shell, et le shell sur le chart control de mon tri par bulle oO

    Je pense que cela fait un peu tout crash x) ! Et c'est pour cela que j'ai besoin d'aide, car je suis incapable de le résoudre tout seul.

    J'utilise cette facon (screen) :

    Le refresh de mes charts :
    Nom : 0a525a0c6a.png
Affichages : 805
Taille : 27,9 Ko

    Mes workers et mon clic bouton :
    Nom : ef5840e4ac.png
Affichages : 697
Taille : 11,6 Ko


    Mon algo de tri par bulle (dans un classe)
    Nom : 205db32ba2.png
Affichages : 691
Taille : 12,9 Ko

    Et celui de mon shell (aussi dans une classe)
    Nom : 167f6b224b.png
Affichages : 1222
Taille : 19,2 Ko


    Voila comment j'ai fais, sinon jamais vous ne comprenez pas tout, je peux vous envoyer mon projet par message privé !

    Merci de vos aide !

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    Envoie moi ton projet si tu veux, sinon tu peux attendre que le premier tri est terminé pour commencer le deuxième, tu peux savoir si ton backgroundworker a terminé grâce à cet event: https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx

    Sinon tu as la balise code pour mettre tes bouts de code.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Par défaut
    Yop !

    J'ai réussi a contourner le problème, mais je pourrais quand même t'envoyer mon projet si tu veux !

    Oui je sais pour le code, mais l'image allait un petit peu plus vite pour moi ^^

Discussions similaires

  1. Déclarer et mettre une variable dans une boucle for
    Par xunil2003 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 30/04/2013, 11h55
  2. mettre en pause une boucle while
    Par anthodub dans le forum LabVIEW
    Réponses: 8
    Dernier message: 20/04/2011, 12h27
  3. VB5 Comment mettre en pause une boucle?
    Par geof dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 18/04/2008, 12h08
  4. [batch] incrémentation dans une boucle for
    Par bart64 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 08/09/2004, 20h05
  5. Réponses: 3
    Dernier message: 06/07/2004, 10h21

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