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.
5 juin 2010 à 20:30
4 juin 2010 à 00:18
31 mai 2010 à 17:48
31 mai 2010 à 08:52
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 ?
26 mai 2010 à 16:57
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.