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 :

Constructeur / Références et Threads [C#]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut Constructeur / Références et Threads [C#]
    Bonjour,

    Présentation :
    Etant étudiant dans le cadre d'un "projet" il nous est demander l'utilisation de Multi-thread pour effectuer des opérations de lecture/opération/écriture dans le langage de notre choix.

    Problème rencontré:
    Suite à plusieurs recherches sur l'utilisation des Threads en c#, j'en suis venu à préférer la solution de l'utilisation de classes avec un Main(créé par mes soins) plutôt que les méthodes static, car je trouve cela plus clair et lisible, ce qui faciliterai la présentation du projet.

    Je n'es aucun mal à faire tourner les Threads avec utilisation de méthodes static (j'ai essayer pour voir ce que ça donnais quand même ^^)

    Hors avec l'utilisation de classe je suis confronter à un problème plutôt étrange, jusqu'à présent je me servai du mot clef ref pour utiliser la référence de la variable et non sa valeur.
    Hors lorsque je créé ma classe et que je passe mes paramètres dans le constructeur avec le mot clef ref, le constructeur affecte la valeur de la variable passer en paramètre à ma variable d'instance.

    Alors que je souhaiterai que ma variable d'instance pointe sur la même variable que celle passé en paramètre pour que ma variable dans mon Main de lecture sert aussi dans mon Main de calcul (pour des raisons propres au projet je n'utilise pas de semaphores).

    Il y a une chose que j'ai dû oublier, mais quoi? 3 jours que je bûche là dessus.
    Donc en gros, comment faire pour passer une variables par référence dans un constructeur (ou méthode) quand le mot clef ref ne le permet pas?
    J'ai essayer le boxing, et zieuté sur les pointeur en c#(ce que je trouve source de problèmes).

    Voici le code du constructeur en question, il s'agit pu être d'une erreur d'étourderie invisible à mes yeux depuis 3 jours.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Lecture
        {
            private int l_l, l_t;
    
            public Lecture(ref int t, ref int l)
            {
                l_t = t;
                l_l = l;
            }
        }

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    Logique, dès que tu fais ton affectation, c'est une affectation par valeur qui est opérée. ref sert à modifier la valeur de ton entier dans ta fonction, pas pour ce que tu veux faire (pas à ma connaissance en tout cas). Si ça fonctionnait en static, c'est parce que ta valeur était justement static, et donc commune à tous...

    Pourquoi jouer avec des entiers et non pas des objets que tu peux référencer ?
    Si derrière tu veux jouer avec des int, crée une classe avec un int comme propriété...

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Justement, c'est pour cela que j'ai parler du boxing, ce qui consiste a mettre mon int dans une variable de type Object (classe), pour passer cette objet à un objet l_l. Mais même de cette façon cela ne fonctionnai pas. Quel en est la raison?(j'ai peur que quelque chose ne m’échappe)
    (ceci dit je test immédiatement de créer une classe avec une propriété int).

    Edit : Merci beaucoup, cela fonctionne parfaitement, je pense avoir compris donc comment utiliser ref à l'avenir, en fait, il n'est utile "que" pour des variables en entré/sortie (si j'ai bien suivi).
    Pour la question concernant le boxing, je vais rechercher et essayer de comprendre par moi même pourquoi cela ne pouvais pas marcher .

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

Discussions similaires

  1. Un constructeur est-il thread-safe ?
    Par Chatanga dans le forum Concurrence et multi-thread
    Réponses: 10
    Dernier message: 25/04/2012, 14h56
  2. Constructeur de Thread
    Par Panaméen dans le forum C++/CLI
    Réponses: 4
    Dernier message: 29/09/2008, 09h56
  3. [1.1] passer une référence dans un thread
    Par melleb dans le forum C#
    Réponses: 4
    Dernier message: 26/05/2008, 11h17
  4. récupération d'une référence de Thread
    Par tiamat dans le forum Général Java
    Réponses: 23
    Dernier message: 29/02/2008, 11h35
  5. Threads windows this est null dans le constructeur
    Par ghalaax dans le forum Visual C++
    Réponses: 1
    Dernier message: 12/12/2006, 16h57

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