Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Suspendre/Reprendre Thread [ Système / Exécution ] (Leucistic)

jeudi 4 septembre 2008 à 14:17:22 | Suspendre/Reprendre Thread

Leucistic

Bonjour,

J'ai crée un thread qui sert de chronomètre (affiche le temps sur un label).
Je souhaiterais pouvoir suspendre/reprendre ce thread selon les actions du user. Mais les methodes suspend/resume sont obsolète. J'ai donc voulu me pencher vers les pool de threads, mais ca me parait bien complexe pour juste un malheureux thread. Y a-t-il vraiment que le pool de threads pour faire ce que je veux ?


L'ouverture de l'esprit n'est pas une fracture du crâne


jeudi 4 septembre 2008 à 14:39:14 | Re : Suspendre/Reprendre Thread

leprov

Réponse acceptée !
le pool de thread ne correspond pas a ton besoin...pour ce que tu veux faire, tu dois utiliser un event (systeme, pas les event avec des delegate). Regarde du coté de AutoResetEvent et ManuelResetEvent. Ainsi, a chaque execution de ta boucle, tu attend sur levent, et pour bloquer ton thread tu Reset l'event.
Sinon, pour un chronomètre, pourquoi ne pas juste utiliser un timer, tout simplement? il te suffirait de l'arreter/reprendre...ca semble bien plus adapté a ton cas (apres peut etre que tu as des contraintes qui tobligent a utiliser un thread, ds ce cas utilise les event)

jeudi 4 septembre 2008 à 14:51:37 | Re : Suspendre/Reprendre Thread

Leucistic

J'avais vu dans le pool de threads les manuelResetEvent mais je ne comprenais pas. Je suis déja un peu aidé, alors merci.

Je suis débutant en C# et je fais un jeu du taquin.
Il marche, mais je rajoute maintenant un chrono.
Pour m'entrainer et découvrir le plus de notions possible, j'ai crée un objet Temps qui herite de Timer. Et dans mon MainForm, je fais un thread qui appelle getTime() et l'affiche sur un label.
Je pourrais aussi ne pas arreter le thread et juste mettre Enabled de mon objet Temps à false. Mais ca me permet de coder une nouvelle notion.

L'ouverture de l'esprit n'est pas une fracture du crâne


jeudi 4 septembre 2008 à 15:46:33 | Re : Suspendre/Reprendre Thread

Leucistic

Bon j'ai lu des trucs sur les ManualResetEvent. Je pense avoir compris, néanmoins sa ne marche pas comme je veux, j'ai du oublier quelque chose.
En appuyant sur Set (qui appelle mre.Set()), le thread se lance bien (le chrono démarre).
Lorsque j'appui sur Reset (qui appelle mre.Reset()), rien ne change, et le chrono continue d'avancer.

    Temps temps = new Temps();                // Chronomètre
    Thread chronometre;                        // Thread qui affiche le temps
    delegate void dMajTime(String heure);    // Delegate du thread
    ManualResetEvent mre = new ManualResetEvent(false);
   
    public MainForm()
    {
        InitializeComponent();   
       
        chronometre = new Thread(new ThreadStart(time));
        chronometre.Start();
    }   
   
    // Thread qui met le temps à jour
    void time ()
    {
        mre.WaitOne();
        while(Thread.CurrentThread.IsAlive)
            this.Invoke(new dMajTime(majTime), temps.getStringTime());
    }
   
    // Mise à jour du temps
    void majTime (String heure)
    {
        tTemps.Text = "Temps : " + heure;
    }

    void setClick(object sender, EventArgs e)
    {
        mre.Set();
    }
   
    void resetClick(object sender, EventArgs e)
    {
        mre.Reset();
    }

L'ouverture de l'esprit n'est pas une fracture du crâne


vendredi 5 septembre 2008 à 11:13:04 | Re : Suspendre/Reprendre Thread

leprov

private volatile bool RunClock = true;

void time ()
{
  while(RunClock)
  {
    mre.WaitOne();
    this.Invoke(new dMajTime(majTime), temps.getStringTime());
  }
}

met RunClock a false lorsque tu veux arrêter ton thread. Ca sera plus propre.

(Reste qu'un timer aurait été plus propre et plus simple)

vendredi 5 septembre 2008 à 18:26:01 | Re : Suspendre/Reprendre Thread

Leucistic

Mais dans ces cas là, le ManualResetEvent sert à quoi ?

L'ouverture de l'esprit n'est pas une fracture du crâne


vendredi 5 septembre 2008 à 19:24:06 | Re : Suspendre/Reprendre Thread

leprov

a mettre le thread en attente passive. Tant que ton event n'est pas set, tu es bloqué sur cette instruction. Si ton event est set, tu peux passer. ca te permet de controler quand tu veux etre en pause



Cette discussion est classé dans : thread, threads, reprendre, suspendre, pool


Répondre à ce message

Sujets en rapport avec ce message

Les threads.... [ par Arthenius ] Salut tout le monde,j'ai une petite question concernant les threads....Voila le contexte, j'ai un objet herite d'un datagrid qui permet de charger des Questions sur les threads + Au Secours point d'exclamation [ par emmanuel9 ] Bonjour à tous, En faite ma question serait sur le threads : J'ai cette fonction ci qui me sert à afficher un listview et une progressbar, je l'ais Question réseau et multi thread [ par vbmore ] Salut !je suis en train de programmer un client server TCP/IP et je bute sur un probleme. En effet, pour avoir un systeme asynchro., je créer une nouv Pool de thread et scruter des repertoire en Delphi 7 [ par yanis97 ] Bonjour; Je cherche deux composant Delphi 7 qui : 1- Implémente un pool de threads avec des workers/pile 2- permet de surveiller un repertoire Merc Threads [ par Cisaks ] Bonjour ! Donc voici mon probleme. J'ai un programme qui appel une thread pour activer un serveur asynchrone, elle mémé a deux autres threads qui sont Thread.Abort() [ par nico4nicolas ] Bonjour, Pour la premiere fois, j'utilise les threads alors, pour me faire la main j'ai fait un petit programme pour voir comment ca fonctionne, j'ai les threads 2005 sont extrement minimisé [ par Fildomen ] sltj'ai toujours des problèmes avec la version 2005, et + précisement avec les threads, voilà mon problème:j'ai une form qui appel un sub, et ce sub c Les threads sont lents :-( [ par Fildomen ] salutj'ai un prog (tcpclient) où la rapidité compte vraiment,et j'ai réalisé que quand j'utilise les thread, mon prog devient lent, et quand j'execute ThreadPool avec 1000 requetes [ par darkolite ] Bonjour messieurs (dames?)Je lutte depuis pas mal de temps avec le ThreadPool en C#. Je ne sais pas si c'est d'ailleurs la meilleurs solution. Voila c Méthodes appelées par des threads [ par churrros ] Bonjour, J'ai adapté la source Client-Serveur de LumesH (Merci à Yxion pour son aide) puis j'y ai ajouté un bouton "start/stop" côté serveur. Problèm


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.