begin process at 2012 02 17 09:05:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Divers

 > 

General

 > 

Pause-redemarageet stop avec une fonction récursive


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pause-redemarageet stop avec une fonction récursive

samedi 22 novembre 2008 à 18:07:37 | Pause-redemarageet stop avec une fonction récursive

Naevis

Salut,
Voilà,
Je cherche par l'intermédiaire de 3 boutons
le premier pour faire une pause sur la fonction récursive.
le deuxieme pour faire un stop de la fonction
le troiseme bouton pour continuer la fonction récurssive.
Est-ce possibe??
Car je suis nouveau dans VB.net.
Merci d'avance.
dimanche 23 novembre 2008 à 16:54:57 | Re : Pause-redemarageet stop avec une fonction récursive

fauve

Membre Club
Salut,

L'astuce serait de faire exécuter ta fonction récursive dans un autre thread. Ainsi, tu pourras stopper, suspendre, continuer, arrêter le thread et par conséquent, ta fonction aussi vu que c'est le thread qui va l'exécuter.

Un petit exemple :

Note : La méthode Suspend() et Resume() sont obsolète mais tu peux toujours les utiliser. Ca t'affichera seulement deux avertissements.



Public Class Form1

    Private _thread1 As Threading.Thread

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
        _thread1 = New Threading.Thread(AddressOf ThrFunc1) ' ThrFunc1 est la fonction exécutée par le thread.
        _thread1.Name = "Thread1"' Il est parfois pratique de nommer les threads surtout si on en créé plusieurs.
    End Sub

    Private Sub ThrFunc1()
        '   Traitement effectué par le thread.
        Try
            ' Appel de ta Fonction Récursive
        Catch ex As Exception
            Debug.WriteLine(ex.ToString())
        End Try
    End Sub

    Private Sub Lancer_Thread_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Lancer_Thread.Click
        _thread1.Start() ' Lance le thread
    End Sub

    Private Sub Suspendre_Thread_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Suspendre_Thread.Click
        _thread1.Suspend() ' Suspend le thread
    End Sub

    Private Sub Continuer_Thread_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Continuer_Thread.Click
        _thread1.Resume() ' Continue le thread suspendu
    End Sub

    Private Sub Arreter_Thread_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Arreter_Thread.Click
        _thread1.Abort() ' Arrête le thread
    End Sub
End Class




++

Fauve

Pensez : Réponse Acceptée 
lundi 24 novembre 2008 à 18:21:15 | Re : Pause-redemarageet stop avec une fonction récursive

Naevis

Merci pour l'info,
J'ai testé mais je n'y arrive pas.
J'essaye de voir ce qu'est un thread.. Mais je ne comprend pas ce que c'est-_-
Je suis super novice.
Pour info, la fonction récursive est les tour d'hanoi.
Peut-on m'explique ou me donner des indications pour mieux comprendre le thread.
lundi 24 novembre 2008 à 18:46:52 | Re : Pause-redemarageet stop avec une fonction récursive

fauve

Membre Club
Salut,

Un thread permet de diviser l'application, il est conseillé de s'en servir, notamment dans les taches complexes qui risquent de bloquer l'interface

Ainsi, si un Thread bloque ou ne réponds pas à cause d'une fonction qui effectue une tâche complexe, ton programme restera actif.

En effet, si on effectue une recherche ou une écriture sur le disque qui est plutôt longue dans le même thread que ton programme, l'interface graphique de celui-ci sera gelé et tu pourras rien faire pendant le temps de l'exécution de la tâche.

En résumé, un thread permet de réaliser des tâches en arrière plan.

Note : Si tu as d'autres questions, n'hésites pas 

++

Fauve

Pensez : Réponse Acceptée 
lundi 24 novembre 2008 à 19:41:38 | Re : Pause-redemarageet stop avec une fonction récursive

fauve

Membre Club
Sinon,

Tu pourrais mettre le code de ta fonction récursive et en même temps le soucis que tu rencontres avec l'exemple que j'ai mis précedemment pour le thread

++

Fauve

Pensez : Réponse Acceptée 
lundi 24 novembre 2008 à 20:36:06 | Re : Pause-redemarageet stop avec une fonction récursive

Naevis

Voilà le code que j'ai pour ma fonction pour le moment.
C'est très brouillon. j'ai renomé pas mal de chose à ma sauce. Donc il y a un risque de ce perdre

Public Class Form1
    Dim cpt As Integer
    Dim expoH As Integer
    Public Sub Hanoi(ByVal N As Double, ByVal A As Char, ByVal B As Char, ByVal C As Char)
        ProgressBar1.Value = cpt
        If N > 0 Then
            ProgressBar1.Value = cpt
            Hanoi(N - 1, A, C, B)
            lbldpl().Text = lbldpl.Text & vbCrLf & "Déplacer de " & A & " vers " & B & "."
            Application.DoEvents()
            minicompteur.Text = "evolution: " & cpt & " / " & (ProgressBar1.Maximum) & "."
            ProgressBar1.Value = cpt
            cpt = cpt + 1
            ProgressBar1.Value = cpt
            Hanoi(N - 1, B, A, C)
            ProgressBar1.Value = cpt
        End If
        minicompteur.Text = "evolution: " & cpt & " / " & (ProgressBar1.Maximum) & " ."
        lblpct.Text = cpt / (ProgressBar1.Maximum) * 100 & "%"
    End Sub
    Private Sub startH_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles startH.Click
        expoH = nbrann.Value
        ProgressBar1.Maximum = (2 ^ expoH) - 1
        startH.Enabled = False
        endH.Enabled = True
        RaZH.Enabled = False
        nbrann.Enabled = False
        lbldpl.Text = "étape à suivre pour" & Str(nbrann.Value) & " anneaux."
        Hanoi(nbrann.Value, "A", "B", "C")
        totetape.Text = " le nombre d'étapes est de " & (ProgressBar1.Maximum) & " mouvements."
        endH.Enabled = True
        RaZH.Enabled = True
    End Sub

    Private Sub RaZH_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RaZH.Click
        totetape.Text = "nombres d'étapes."
        minicompteur.Text = " état en cours / total d'états à faire."
        lblpct.Text = "Avancement en %. "
        lbldpl.Clear()
        startH.Enabled = True
        nbrann.Enabled = True
        ProgressBar1.Value = 0
        cpt = 0
    End Sub
    Private Sub lbldpl_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbldpl.TextChanged
        lbldpl.SelectionStart = lbldpl.TextLength
        lbldpl.ScrollToCaret()
    End Sub
    Private Sub endH_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles endH.Click
        End
    End Sub
End Class


lundi 24 novembre 2008 à 20:37:36 | Re : Pause-redemarageet stop avec une fonction récursive

Naevis

Là c'est le code de base, je n'ai pas rajouté le thread car je ne sais pas ou le mettre déjà.
Où le déclarer et faire en sorte que tout tourne correctement.
Ici je n'ai pas rajouté les fonctionnalités que je souhaite mettre plus haut.
Enfin, voilà:)
lundi 24 novembre 2008 à 20:40:39 | Re : Pause-redemarageet stop avec une fonction récursive

fauve

Membre Club
Bon déjà je vois tout de suite pourquoi le thread ne fonctionne pas car tu ne peux accéder à des contrôles qui ne se trouvent pas dans le même thread que ta fonction.

Notamment, ProgressBar1


Pensez : Réponse Acceptée 
lundi 24 novembre 2008 à 20:43:57 | Re : Pause-redemarageet stop avec une fonction récursive

Naevis

Bon j'ai modifié un truc, j'ai nettoyé ma fonction de toute les progressbar.
j'ai mis progressbar1.value=cpt dans le Private sub startH
lundi 24 novembre 2008 à 20:56:00 | Re : Pause-redemarageet stop avec une fonction récursive

Naevis

Car ce que j'essaye aussi, c'est de pouvoir faire une pause sur la progressbar, et les label qui me montrent l'état d'avancement.

1 2

Cette discussion est classée dans : fonction, stop, pause, récursive, redemarageet


Répondre à ce message

Sujets en rapport avec ce message

fonction pause [ par cailloux ] existe t il une fonction qui permette au programme de faire une pause en miliseconde si oui laquelle si non qu'elle est l'unité la plus faible qui per Recherche le nom d'une fonction [ par eltaris ] Existe t-il une fonction qui mette le programmeen "pause" pendant un temps que l'on choisit ?ex : si je tape Pause(5), le programme s'arrête pendant5 Fonction Dir récursive [ par legion91 ] Voila je cherche le moyen de liste tout les fichiers d'un repertoire et ses sous répertoire avec la fonction Dir.Car la sa n'affiche que le repertoire Play pause, stop [ par nuttyfbr ] Comment mettre un bouton play, un pause et un stop dans le code source d'une page pour qu'il agisse sur la vidéos en cours (dans une i-frame) ?Pour pl Vidage du stack [ par firens ] Bonjour, j'ai fais une fonction récursive mais malheureusement après un certain nombre d'itération (je ne les contrôles pas...car je dois générer quel pause [ par webzied ] salut   comment mais une pause d'une fonction sans arrter lors fonction en vb6 Pause dans access [ par antoineraymond ] J'aimerais avoir une fonction pour écouler du temps avant de lancer d'autre fonction dans access sans utilisé le timer du formulaire.MerciAntoine Arreter et sortir de fonctions : un 'Master Stop'... [ par tcholleybus ] Bonjour à tous!J'ai actuellement besoin de vos lumières:Je lance une 'Sub' après avoir cliqué sur un bouton. Elle effectue une communication vers 2 ap Faire une pause dans une fonction [ par gskorski ] J'ai deux form. Quand la fonction unload de la première est appelée, j'appelle ma deuxième form. Mon problème c'est qu'il ferme ma première form alors Pause dans une fonction [ par tchouck ] j'ai cree une fonction de test et je voudrais faire une pause afin d'attendre une reponse.( env 0.5seconde )ex :if text1.text = "1" thentext2.text = "


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales