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 :

Synchro de thread pour acquisition données


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2002
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 216
    Par défaut Synchro de thread pour acquisition données
    Bonjour,

    sachant que j'ai un thread qui me gère de façon autonome un timer rapide (10ms) ; celui ci me fait l'acquisition de données (type double) copiées dans une ligne d'un dataTable.
    Dans un timer de form, je lis ces données (des groupes de plusieurs lignes du DataTable) et modifie une de ces données et les copies dans des "serie" de chart pour afficher les courbes de ces données.
    Je pense avoir une "collision" entre l'écriture du premier Thread et lecture/ecriture du datatable dans le Timer de Form.

    comment m'est il possible de synchroniser les thread en sachant que celui d'acquisition (10ms) est prioritaire par rapport à celui du Timer de form pour affichage et traitement de la donnée.
    Lock , Mutex.... ???

    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 13
    Par défaut bonjour
    Personnellement j'utilise lock pour des ressources simple, tu peux aussi utiliser Interlocked, pour des opérations simples et j'utilise mutex
    pour synchroniser des processus différents .

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    si tu n'as qu'un lecteur : lock
    si plusieurs threads peuvent lire en même temps : readerwriterlockslim (lecture simultanné possible alors qu'avec le lock ce n'est pas le cas, mais ca garde l'écriture en verrou unique)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 79
    Par défaut
    Bonjour,

    Une autre approche : utiliser un buffer... !

    Comme tu ne peux pas garantir que les données seront traitées aussi vite qu'elles arrivent, il te faut un buffer tampon
    qui stocke les données issues de l'acquisition pour pouvoir les traiter par la suite.

    Un thread remplit le buffer, un autre thread le vide... Cela te permet de désynchroniser les 2 opérations et de pouvoir absorber des pics
    de charge du PC (tu n'es pas le seul à bosser sur ces p.... de machines !)

    Idéalement, il faut que tu reproduises le mécanisme de FIFO . Le thread d'acquisition remplit le buffer s'il y a de la place, et le thread de lecture le vide
    s'il y a suffisamment de choses à lire.

    Dans ce cas, le lock suffit (pour le thread d'acquisition).

    @+,
    Phil

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/07/2015, 16h20
  2. [QThread] Thread d'acquisition de données depuis carte PCI
    Par alexgille dans le forum Multithreading
    Réponses: 19
    Dernier message: 11/02/2011, 17h14
  3. exécuter un thread pour une durée donnée
    Par selmani300 dans le forum C
    Réponses: 6
    Dernier message: 28/04/2009, 13h44
  4. programme en VB pour acquisition de données
    Par Henry85 dans le forum VB.NET
    Réponses: 7
    Dernier message: 19/03/2009, 10h00
  5. Réponses: 3
    Dernier message: 11/02/2004, 12h50

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