alonsyl
Messages postés348Date d'inscriptionmardi 6 avril 2004StatutMembreDernière intervention 6 novembre 2008
-
14 janv. 2005 à 16:59
MoiOlivier
Messages postés172Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention 4 août 2005
-
15 janv. 2005 à 12:14
bonjour,
y a t'il un moyen pour faire tourner un programme secondaire en parallele du programme principal.
je mexplique: j'ai un programme qui effectue pas mal d'operations de calculs et qui tourne pendant 15 a 20 secondes. pour faire patienter l'utilisateur, j'aimerais faire tourner en meme temps un deuxieme petit prog avec une animation.
j'ai deja pense a une "progress bar", mais ca ne correspond pas tout a fait etant donne que je ne fais pas de bases de donnees.
j'ai egalement penser a 1 deuxieme exe qui serait lance au debut de la tache et coupe a sa fin mais c'est un peu bancale dans le gestion.
auriez-vous une idee (ou des connaissances) a me soumettre ?
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 14 janv. 2005 à 18:45
Salut ;O)
Ton besoin aborde le multithreading. VB6 est dépourvu en standard de cette fonctionnalité : lancer un process indépendant de celui dans lequel tourne l'application.
1.
Il existe une API permettant de créer un process : CreateThread
Mais VB6 est très instable avec le multithreading et Microsoft déconseil son utilisation.
Voir ici pour un exemple : http://www.mentalis.org/apilist/CreateThread.shtml
2.
Une autre façon de procéder serait de créer un ActiveX EXE
Le composant ActiveX EXE peut traiter des requêtes dans une thread d'exécution indépendante en utilisant des événements ou des rappels asynchrones pour signaler au client qu'une tâche est terminée.
3.
Plus simple à mettre en place mais par forcément très "beau", ceci dit efficace, créer un autre EXE qui serait lancé à partir de l'application principale et les faire discuter par liaison DDE.
Voici ici sur VBFRANCE : http://www.vbfrance.com/gma/source/dde
Il y a certainements d'autres façons de faire, mais ce sont celles qui me viennent à l'esprit là tout de suite...
MoiOlivier
Messages postés172Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention 4 août 2005 15 janv. 2005 à 12:14
Salut,
Tout celà me semble vachement trop compliqué rien que pour afficher une anim pendant un traitement...
Bon, je ne connais pas les détails de ton implémentation, mais je suppose que le long traitement résulte d'une boucle. Moi, à ta place j'introduirais dans la boucle d'abord un DoEvents, pour éviter de bloquer complètement la machine, ensuite une instruction qui s'exécuterait toutes les x boucles et dans laquelle tu places le code qui fait avancer ton animation par exemple.
Pour exécuter une action toutes les x boucles, voilà comment je procède d'habitude :
Dim i as Integer 'compteur que tu incrémentes à chaque boucle.
Dans la boucle :
i=i+1
If i mod x = 0 then 'x étant le nombre de boucles à effectuer avant de rentrer dans le If
'ici l'action à effectuer (afficher l'image suivante de ton anim par ex.)
End If