Multithreading activex

Soyez le premier à donner votre avis sur cette source.

Vue 5 363 fois - Téléchargée 726 fois

Description

Méthode de multithreading de référence d'après microsoft. Sans API, projet activeX standalone. Le projet montre comment créer des threads compartimentées. Le multithreading est déconseillé en VB6 utilisant les API de création de thread tel que SHCreateThread mais pas du tout risqué avec cette présente méthode. C'est une méthode peu connue et efficace. Elle est peu connue car peu de livre en font référence tout simplement. Cette présente méthode isole les variables des threads en les compartimentant (apartment threaded). En activeX, les threads doivent attendre car il y a des priorités de lecture/écriture.

Cette présente source, simule l'exécution d'un calcul lancé dans des threads isolées. Le résultat des threads (des calculs) sont récupérés à l'aide de RaiseEvent.

Pour envoyer une variable dans une thread, on utilise les property des class.

La mise en œuvre de cette méthode est complexe. Mais j'ai essayé de vous préparez le terrain pour l'implémenter dans vos projets. Plusieurs critères doivent être respectés :
- Projet non standard exe mais activeX standalone
- Démarrer le programme avec une procédure Sub Main ()
- Configurer "Thread per object" dans les propriétés du projet. Ce qui correspond au nbre de threads non limités
- Compilation p-code ou natif
- Choisir Standalone dans l'option "component"
- Création de thread via CreateObject(...)
- La class qui crée la thread doit être de type "multiuse"
- Un délai doit être créé dès la création de la thread (notion de callback à l'aide d'un timer d'une form)
- Les variables à envoyer dans la thread, doivent être envoyées via les property de la procédure à envoyer en thread
- La procédure à exécuter dans une thread (ici un calcul) doit être dans une class multiuse et doit générer des évènements (events)
- Les variables en sortie de la thread doivent être récupérées à l'aide d'évènements RaiseEvent
- Faut compiler le projet pour utiliser le multithreading

Cette source illustre la simulation d'un calcul exécuté dans un thread. La variable envoyé en entrée est la durée du calcul. Le résultat du calcul est récupéré à l'aide de RaiseEvent dans la form principale.

Le code contient une simple interface permettant de créer une thread et un compteur +1. Le compteur permet juste d'observer que la fenêtre n'est pas figée durant le multithreading. Cette méthode est interessante pour processeur multicore (processeur à plusieurs coeurs). Par exemple, choisissez 4 threads pour observer que 100% des ressources d'un processeur 4 cores seront utilisées.

Les options de résultat simultanés ou les uns après les autres, permettent de montrer comment récupérer des résultats de deux manières.

Les deux class nécessaires pour le multithreading peuvent-être facilement réutilisable pour vos programmes.

Principe de multithreading activeX issus du livre "Programming Microsoft Visual Basic 6.0 / Francesco Balena".

Conclusion :


Faut compiler le projet pour utiliser le multithreading.

Les deux class nécessaires pour le multithreading peuvent-être facilement réutilisable pour vos programmes.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

chieur
Messages postés
67
Date d'inscription
dimanche 22 février 2004
Statut
Membre
Dernière intervention
27 mai 2009

re phil g pa retel le cod kel modif a tu apporte ?
Philippe734
Messages postés
309
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
15 juin 2015
1
J'ai mis à jour la source. Grâce à toi grrnfr, j'ai enfin compris comment faire pour récupérer le résultat de variable issus de threads. Merci. En tous cas, cette méthode est vraiment excellent.
Philippe734
Messages postés
309
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
15 juin 2015
1
merci de ta contribution grrnfr, je vais donc inclure cette astuce dans la source. J'ai publié la source pour montrer comment faire.
cs_grrnfr
Messages postés
1
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
31 mai 2010

Bonjour à tous,
Personellement, je fais du multi-threading en VB6 en programmant les threads dans des projets "ActiveX exe" et le programme principal dans un projet "standard exe".
La communication entre les le programme principal et les threads se fait via les méthodes et les events des ActiveX exe. C'est juste un peu galère si on instancie un array de threads quand on veut récupérer les events mais ça marche super bien.
Quel est l'avantage de la méthode proposée ici ?
Philippe734
Messages postés
309
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
15 juin 2015
1
Oui c'est que j'ai expliqué rapidement dans la description. On ne peut pas passer le contenu d'une variable de la thread principale aux autres threads et vice versa. Cependant, je suis sûr que c'est possible et je cherche d'ailleurs une solution.
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.