Execution asynchrone d une fonction

thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 - 29 avril 2005 à 21:21
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 - 30 avril 2005 à 01:15
Bonjour,
je réitère ma question car c'est important pour moi.




j'ai une fonction qui a une boucle qui tourne jusqu'a un evenement precis qui me fait sortir de la boucle et de la fonction.

cette fonction est appelé dans le load du form.

mais le faite d'apeller cette fonction bloque le reste du code de mon load du form tant que la boucle n'est pas fini.

je cherche donc a executer de facon asynchrone cette fonction afin que mon code continue dans le load du form meme si dans la fonction je suis toujours dans la boucle.

avez vous une idée ou un exemple ou un lien a me fournir.

NB : je connais DoEvents

7 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
29 avril 2005 à 22:14
Utilise pour cela un deuxième thread : l'un pour ton form_load, l'autre
pour ta fonction, ainsi, ta fonction s'éxécutera en même temps que ton
form_load.

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
29 avril 2005 à 22:50
Bonne idée DS mais je me demande jusqu'à quel point un tel fonctionnement est vraiment nécessaire ? Ne pourrait-on pas se contenter d'un Timer par exemple ?
Thierrydelepine < Pourraais-tu nous en dire plus sur le fonctionnement et la finalité de ton programme, on aura peut-être une autre solutions plus simple que le Multi-threading

Christophe R
0
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
29 avril 2005 à 23:20
Dès le demarrage du programme je lance une fonction qui
utilise deux APIs :
Ret = FindFirstChangeNotification("C:\DossierX", &HFFFFFFFF, FILE_NOTIFY_CHANGE_ALL)
WaitForSingleObject Ret, &HFFFFFFFF

qui me permettent de mettre en attente cette fonction d'un changement quelconque dans un dossier.
seulement mon code du form_load ne continue pas a s'executer tant que la fonction n'a pas fini son Hock via l'API WaitForSingleObject.

j'ai essayé de mettre ma fonction dans un OCX et de mettre un timer qui lorsque je donne le nom du dossier via une propriete créé dans l'OCX lance ma fonction.
la fonction renvoi son resultat (des qu'il y a changement dans le dossier) via un Sub event dans l'OCX, cela fonctionne aussi mais idem mon form_Laod ne continue pas tant que le Hock dans la fonction n'est pas fini.

DARKSIDIOUS : je ne vois pas ce que tu veux dire par thread.
Pourrais tu me donner plus de détail o un lien ou un exemple.

J'espere que vous pourrez m'aider a solutionner mon probleme.
merci d'avance.
0
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
29 avril 2005 à 23:41
Pour mon test avec l'OCX, je rectifie : le form_Load continue mais mon form se fige des que le timer declenche ma fonction comme si la boucle ou hock de l'API WaitForSingleObject bloquait l'execution complete de mon programme tant que l'evenement de changement du dossier n'a pas eu lieu.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Stephane Messages postés 550 Date d'inscription vendredi 5 janvier 2001 Statut Membre Dernière intervention 23 septembre 2006
29 avril 2005 à 23:52
Salut



si je comprend bien tu es bloqué, parce que ta WaitForSingleObject ne rend pas la main a ton programme ?

Dans ce cas le multi-thread est obligatoire, toutefois, son utilisation
est tres instable avec VB, il te faut donc une tres grande prudence
quand tu vas l'utiliser.

Le multi threading consiste a avoir de point d'execution, comme si tu lancé 2 exe différent, mais dans un seul.

Mais ca plante tres souvent ! J'ai tester pendant longtemps, sans jamais arriver à quelque chose de stable.



fait une recherche a thread ou multi thread, il y a une source qui marche bien qui affiche une serie de Msgbox



voila


A+



<hr size="2" width="100%">Utilisateurs du forum : Merci de lire http://www.vbfrance.com/forum.v2.aspx?ID=445871

<hr size="2" width="100%">
0
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
30 avril 2005 à 00:36
je viens de faire quelques tests pas tres concluant avec l'exemple des multi MSgbox en multi thread.

dans l'environnement d'execution VB ca marche au debut, mon prog a la main et la fonction se lance.
lors d'un changement dans le dossier la fonction se deroule et lors de sa sortie "erreur d'exeption windows".

Si je pars d'un EXE alors la "erreur d'exeption windows" des le lancement de la fonction meme si celle ci commence par un msgbox...
0
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
30 avril 2005 à 01:15
Stephane : Le code montrant l'utilisation des multi thread avec des msgbox fonctionne dans l'environnement Vb mais pas lorsqu'il est compilé en EXE, helas !
J'ai trouve aussi un autre code qui traite les threads dans une class et il a le meme probleme des que le programme est compilé en EXE.

Je vous remercie en tout cas pour vos reponses meme si je n'ai pas encore la solution final.
Si de votre coté vous avez un exemple qui, compilé, ne plante pas je suis preneur, ou bien une autre methode pour arriver a mes fins.
0
Rejoignez-nous