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 :

multi threading et déclenchement


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Par défaut multi threading et déclenchement
    Bonjour,

    Voici ce que je voudrais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void run()
    {
        while(true)
        {
            if (iCanPerfomTask)
              dotask();
        }
    }
    run est un processus qui tourne et d'autre processus peuvent faire en sorte que iCanPerformtask passe à true.
    Le code foncionne mais j'ai de l'attente active pour mon run et ce n'est quand meme pas top.
    Je pourrais imaginer une synchronisation avec un truc dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void run()
    {
        while(true)
        {
            myEvent.waitOne();
            dotask();
        }
    }
    public void trigger()
    {
        myEvent.set();
    }
    Le problème est le suivant : si plusieurs triggers sont déclenché, doTask ne sera éxécuté qu'une fois. En faite je voudrait que do task soit exécuté autant de fois que myEvent.set() est appelé. Est ce qu'il y a moyen de faire ça ?
    Merci

  2. #2
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 714
    Par défaut
    fais un listener

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par zulad
    fais un listener
    Je pense qu'il aimerait que tu lui donne plus d'informations

  4. #4
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 714
    Par défaut
    je pensais à un compteur du nombre d'occurence de l'objet myEvent

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Par défaut
    Oui, un compteur du nombre d'appels à myEvent.set() est ce qu'il me faudrait.

    Donc tu me dis de me plonger dans les listeners pour faire ca ? (je ne connais rien au lsiteners, c'est une classe, une interface?)

  6. #6
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 714
    Par défaut
    ben c'est qu'un concept, il doit surement y avoir des classes toutes faites mais ça ne m'a pas l'air trop compliqué à faire de a à z.

    Déja si tu affecte tous tes myEvent dans un tableau tu peux faire un length. Un increment global dans ta boulce peut aussi faire l'affaire.

  7. #7
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 714
    Par défaut
    (je ne connais rien au lsiteners, c'est une classe, une interface?)
    Chaque fois qu'un threat est modifier le listener indépendant est au courant et peu lancer de nouveaux thread. En gros c'est ça.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Par défaut
    Finalement j'ai fais ca, et ca à l'air de plutot marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    private object sync = new Object();//objet de synchronisation
    private int i =0; //compteur sur la différence de fois où trigger() a été appelé et le nombre de tâches effectuées
    public void run()
    {
        while(true)
        {
            Monitor.Enter(sync);
                while (i <= 0) //un if (i==0) devrait pouvoir faire l'affaire, mais on ne sait jamais...
                    Monitor.Wait(sync);
     
                dotask();
                i--;        
            Monitor.Exit(sync);
        }
    }
    public void trigger()
    {
        Monitor.Enter(sync);
            i++;
            Monitor.pulse(sync);
        Monitor.Exit(sync);
    }

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. Réponses: 2
    Dernier message: 15/05/2004, 18h33
  3. Réponses: 16
    Dernier message: 30/01/2004, 11h05
  4. [VB6][active x] faire du multi-thread avec vb
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/05/2003, 12h01
  5. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 18h09

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