SamirAloui
Messages postés53Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention20 mars 2008
-
3 août 2006 à 19:23
SamirAloui
Messages postés53Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention20 mars 2008
-
4 août 2006 à 17:54
Bonjour, j'arrive a developper un programme compresseur de données qui peut compresser n'import q'elle taille dans moins de 2 kilos, mais le problem est que le temps d'execution pour un fichier de 10 mega est trops (>10 munites), je veus s'avoir comment lire ou ecrire dans un fichier avec plusieur processus (comment gérer la multithreading)
merci
SamirAloui
Messages postés53Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention20 mars 2008 4 août 2006 à 17:54
Merci boucoup, et de mon tour je te promet si j'arrive à optimiser mon compresseur je t'envoie une copie (mais pas la source) gratuitement, et j'espere q'il va faire une grande chose dans le monde de compression de donne Merci encore
pymaster
Messages postés74Date d'inscriptionvendredi 14 juillet 2006StatutMembreDernière intervention14 août 2006 3 août 2006 à 19:42
Bonjour
Si tu ne veux pas te lancer dans trop compliqué il existe dans Vs2005 un control "Background Worker" (regarde dans "tous les Windows Form" dans la barre d'outils )
Un backgroundWorder c'est un thread mais dont la plupart de la gestion est fait pour toi. Tu créé l'objet et tu place ton code dans l'évènement DoWork du controle.
Pour en créer un à partir du code tu peux faire :
Private bwTest As System.ComponentModel.BackgroundWorker = Nothing
Me.bwTest = New System.ComponentModel.BackgroundWorker()
note : il faut que les fonctions bwTest_DoWork et bwTest_RunWorkerCompleted existe déjà et qu'elle est la signature
private sub bwTest_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
et
Private Sub bwTest_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwSavePhoto.RunWorkerCompleted
Voila, pour ce qui est des objets Threads alors c'est beaucoup plus complexe, mais si le Backgroundworker ne suffit pas je pourrais t'expliquer
SamirAloui
Messages postés53Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention20 mars 2008 4 août 2006 à 17:08
Merci, mais pas ça que je veus
Mon pbm est que je veus une architecture de (Pproducteur / Consomateur)
c-a-d que ma methode de compression:
<ol>
<li>Utilise la notions des couche</li>
<li>Chaque couche utilise des informations en entree, et genere des infos en sortie</li>
<li>les infos de sortie de chaque couche seront les infos d'entree de couche suivante.</li>
<li>Apres une quantité constante d'information de sortie, la couche suivante peut etre activée (un genre de parallellisme)</li>
<li>Une fois les infos d'entrée sont utilisées, en peut les supprimer (Vider la RAM)</li>
</ol>
Alors
je veus effectuer chaque couche à un processus (Tâche OU Thread) pour :
- Accélérer le temps d'execution
- Gagner l'espace mémoire
Le probleme est que je veus connetre comment:
1-Creer plusieur processus et les synchroniser
2-Partager une ressource (zone mémoire / fichier) entre plusieur processus (Probleme de Lecteur/Redacteur)
Merci
pymaster
Messages postés74Date d'inscriptionvendredi 14 juillet 2006StatutMembreDernière intervention14 août 2006 4 août 2006 à 17:40
Rebonjour !
Ok, à ce moment la tu a vraiment besoin de l'objet Thread
Pour un exemple tu peux regarder ma source ici
J'utilse 2 Thread pour afficher mon images avec des files d'attente partage d'information par file et tableau et tout ce dont tu à de besoin
Pour Utiliser des Threads comme tu veux le faire tu va avoir besoins de Mutex et Semaphore. Ce sont des objets servant à faire la Synchronisation des Threads
En .NET pour partager des variables entres plusieurs Threads tu dois les déclarer Shared, ainsi chaque Threads accèderas à la même instance de la variable.
Dans ton cas pour synchroniser chacune de tes couches utilse les Semaphores. Les sémaphore limite l'accès d'une ressource, dans ton cas la ressource c'est ton Thread. Si tu fait maSemaphore.WaitOne() le Thread sera mis en attente jusqu'a ce qu'un autre Thread fasse maSemaphore.ReleaseOne.
Note : On attribu une valeur à la création d'une sémaphore example
Private Shared sSemaFile As New Semaphore(0, 1)
le 0 veux dire que le semaphore commence avec 0 accès permis et 1 veux dire qu'il ne peux pas permettre plus que 1 accès
Ce qui veux dire que quand tu fait sSemafile.Release() le premier coup la valeur de ton sémaphore est rendu à 1 accèss permis, si un Thread a ce moment la était en attente d'un accès alors il le prendra et la valeur reviedra à 0 accès permis.
Note : Il ne faut pas faire plus de release que de Wait() sinon c'est une erreur
Exemple :
private shared sSema as Semaphore
private codeDeMonThreads1
while(1)
Code ..
' Lorsqu'il y a assez d'info
sSema.Release() ' Averti l'autre Thread qu'il peut démarer
end while
End Private
Private sub codeDeMonThreads2
while(1)
sSema.WaitOne ' En attente d'un relase
code ...
' Si on doit encore faire du code
sSema.Release
' Sinon on retourne en wait
end while
end sub
Voila, l'exemple est très simple, mais je pense que c'est en regardant mon code complet que tu va vraiment pouvoir apprendre de quoi
Les Threads c'est vraiment pas facile, si t'as encore besoin d'aide hesite pas !
Bonne chance ,
PY
Vous n’avez pas trouvé la réponse que vous recherchez ?