Background et multithreading

Signaler
Messages postés
7
Date d'inscription
mardi 4 septembre 2007
Statut
Membre
Dernière intervention
31 janvier 2008
-
Messages postés
7
Date d'inscription
mardi 4 septembre 2007
Statut
Membre
Dernière intervention
31 janvier 2008
-
Bonjour,

Je vais vous exposer mon probleme. Je suis en train de réaliser la capture d'un flux de données issu d un connecteur USB2.0.
La partie Hardware marche, enfin il semblerait.

Afin d avoir une interface assez joli j ai crée une form. Je dois capturer mon flux de donnée lorsque j appuie sur un bouton et le stopper lorsque j appuie sur un autre bouton.
Pour réaliser cette capture j ai créé un "backgroundworker". Mon problème est que j utilise une fonction fournit par la librairie du composant permettant de lire un "endpoint" (l'endroit ou son stoqué les données sur une interface USB avant d etre envoyé) de mon USB interface. Cette cette fonction retourne un tableau de bytes (dans mon cas 512bytes). Afin d enregistrer ces données sur un fichier textes je dois parcourir ce tableau... Mon problème est que le débit de mon USB ne me permet pas de faire la capture et l'écriture dans le meme thread... (j ai essayé et je perds des données)
J ai essayé de créer un autre "backgroundworker" mais apres une lecture plus détaillé je me suis appercu que ce n'était pas possible.
Je dois créer une autre tache en parallele permettant lorsque qu une donnée est capturée de la lire et de l écrire  dans un fichier.
Ces deux taches devront avoir acces à un meme buffer et l écriture dans le fichier ne devra se faire que lorsqu'une donnée a été recu.
Malheureusement je ne suis pas un expert de c++ et encore moins de visual express c++. Donc j avoue ne pas savoir comment faire du tout.
Quelqu un pourrait il me conseiller et m aider ?

Merci d avance

2 réponses

Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
Yop,

 "backgroundworker" ? c'est pas du C# ça ? Sinon pour réaliser ta tache en C++ je serait toi je créerai 2 thread, chacun fesant leur tâche et vu qu'ils doivent acceder au même buffer je les synchroniserai avec soit une zone critique ou alors un mutex. Pour la création de thread regarde la fonction CreateThread et pour la synchronisation, comme dirait BruNews : Richter chapitre 8 et 9 :D ( http://www.brunews.com/brunews/download/JR4.zip ).

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
Messages postés
7
Date d'inscription
mardi 4 septembre 2007
Statut
Membre
Dernière intervention
31 janvier 2008

Merci pour tes infos je vais regarder,
En fait backgroundworker peut etre utiliser aussi en c++. En tout cas avec visual c est le cas puisque je l utilise. Je suis obligé dans utilisé un sinon je perd le controle de l interface utilisateur. Ce qui m empeche d arreter la capture des données issues de l interface USB.

Mais je pensqit créer un autre thread avec mon backgroundworker(qui est lui aussi un thread)..
Pour le moment j apprends enfin je me cultive..
Enfin je vais essayer toutes les possibilités..
Merci pour ton liens je vais regarder..