Multithreading activex

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

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.