2 progs en paralleles

Résolu
alonsyl Messages postés 348 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 6 novembre 2008 - 14 janv. 2005 à 16:59
MoiOlivier Messages postés 172 Date d'inscription mardi 15 juillet 2003 Statut Membre Derniè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 ?

merci a vous,

alonsyl

3 réponses

Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
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...

Guy
3
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
14 janv. 2005 à 20:51
Salut

Il faut que tu synchronise tes 2 progs
Pour cela, tu peux eventuellement utiliser des semaphore

Tu devrait trouver ce qu'il faut ici http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/synchronization_functions.asp

[mailto:D@runia D@runia]
0
MoiOlivier Messages postés 172 Date d'inscription mardi 15 juillet 2003 Statut Membre Derniè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

Voilà, j'espère avoir pu t'aider.
@+
0
Rejoignez-nous