cs_sephiro
Messages postés101Date d'inscriptiondimanche 1 avril 2001StatutMembreDernière intervention18 février 2008
-
30 sept. 2002 à 12:27
Philippe734
Messages postés308Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention15 juin 2015
-
1 mai 2010 à 16:07
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Philippe734
Messages postés308Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention15 juin 20151 1 mai 2010 à 16:07
L'usage du multithreading est certes déconseillé et souvent instable dans vb6 mais pas impossible. Cependant, l'usage de cette méthode, qui repose sur l'api CreateThread est obsolète aujourd'hui. Je vous recommande d'utiliser la méthode reposant sur l'api SHCreateThread dont voici un exemple ci-dessous. Allez dans ses commentaires, car j'explique comment faire réduire les risques de crash sous vb6 sp6.
Voir la source :
http://www.vbfrance.com/codes/SIMPLE-PROGRAMME-MULTI-THREAD_5590.aspx
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 30 mars 2010 à 11:21
Petite question toujours en rapport avec le multithread.
J'ai mon programme dans un thread(cloisonné) "thA". Ce programme possède une fenetre sur laquelle il y a une imagebox "ImgB"
J'ai pu constaté que entre threads je ne peut pas utiliser de variables globales (ou presque).
Est-ce que en récupérant le DC de l'ImgB je pourrais le modifier depuis un Thread cloisonné thB sans avoir de conflict de droit d'accès ?
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 18 mars 2010 à 10:03
a en fait je suis bête ^^
si je peux pas piloter la fenetre de puis un thread secondair, je n'ai qu'a mettre Excel en thread secondaire et laisser la gestion de la fenetre dans le thread principal...
ca marche tt de suite mieux ...
je me suis entêté dans la mesure ou il est dificile de lancer l'animation dans un autre EXE. l'annimation est intégré dans le "disign" de l'appli...
Raison trouvée : VB6 Standard EXE travail avec un(des) threads cloisonnés qui interdisent l'emploie de variables globales.
J'ai également vu dans un tuto que il faudrait compiler en "P-CODE" je ne sais pas ce que c mais ca ne m'a rien changé du tout...
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 17 mars 2010 à 16:32
tu as n moyens a disposition...
mailslot, pipe, socket, messages, etc.
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 17 mars 2010 à 16:04
bien recu ^^
encore que je trouvais ma solution vraiment classe ^^
(ps comment tu communique entre 2 app ?)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 17 mars 2010 à 14:04
si c'est juste pour une animation...
lance un exe a part qui affiche l'animation...
en communiquant avec lui, tu pourras lui faire afficher un message t'indiquant l'avancement, etc.
une fois ton traitement finit, te suffira de le killer.
c'est le plus simple et surtout le plus propre en VB6
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 17 mars 2010 à 13:55
en effet renfield, c'est bien avec un timer et des DoEvents que je le fait d'abitude.
mais la pas possible.
mais concidère que l'application travaille sur un fichier excel servant de "base de donnée" (c franchement moche mais je n'ai pas le choix, c'est une base qui existe depuis bien longtemps)
--> 40K lignes à traiter. les traitements mêmes pris séparément prennent plus de temps que voulu (en plus ce ne sont pas des bêtes de courses les machines qu'ont les utilisateurs ...)
et il n'y a pas que les actions excel. il y a aussi la copie en local du fichier (ca peut prendre du temps vu que le fichier est sur un reseau ...) etc
c'est pourquoi la solution du multithread pour l'animation me semblait pas mal ^^
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 17 mars 2010 à 13:17
Qu'est-ce qui prend si longtemps ?
UNE opération Excel, ou l'enchainement de commandes de pilotage de Excel ?
parceuq esi tu colles des DoEvents dans ton code, ton thread peut très bien etre remplacé par un Timer qui mettra a jour ton animation...
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 17 mars 2010 à 13:08
Bonjour,
J'ai utilisé un thread comme ci dessus pour annimer un sablier pendant des traitements excel en VB6 (automation).
En effet, lors de certains traitements, le temps mis peut être long (pls 10 aines de secondes). Or, quand un traitement est long a faire, il faut rassurer l'utilisateur en lui metant sous le nez quelque chose qui montre qu'une tâche est bien en cours.
J'ai donc mon Apli qui instancie Excel et effectue des traitements. et un nouveau thread qui fait :
Public Function FNC_THREAD_1()
On Error GoTo erreur
'/!\ jamais de Doevents dans un thread hein ^^
Do
'faire tourner l'image
Current_Img = (Current_Img Mod frmQuBES.IMG.ListImages.Count) + 1
Set frmQuBES.I.Picture = frmQuBES.IMG.ListImages(Current_Img).Picture
'faire une pause
Sleep 250
Loop While True 'faire a l'infini
erreur:
Stop_Thread
End Function
avec
Private ThreadControl1 As clsThreading
Private Current_Img As Integer
Public Sub Start_Thread()
'Init variable
Current_Img = 1
Set frmQuBES.I.Picture = frmQuBES.IMG.ListImages(Current_Img).Picture
Dim mThreadPriority As Long
mThreadPriority = tpAboveNormal
Dim mEnabled As Boolean
mEnabled = True
'Creation du thread
Set ThreadControl1 = New clsThreading
ThreadControl1.CreateNewThread AddressOf FNC_THREAD_1, mThreadPriority, mEnabled
End Sub
Public Sub Stop_Thread()
ThreadControl1.TerminateCurrentThread
End Sub
le problème est le suivant :
en mode d'éxécution sous VBE tout se passe comme voule.Excel tourne et mon sablier tourne aussi.
en revanche, lorsque je génère l'executable (pas de probleme de compilation) et que je l'execute la ca ne marche plus. Le thread principal tourne normalement mais le thread d'annimation (thread ajouté) génère une popup "Violation d'accès en écriture...blablabla"
Et bien sur l'annimation ne marche pas.
pour information, la fenetre frmQuBES est en ShowModal 1
si une personne a une idée d'ou ca peut venir ...
cs_sephiro
Messages postés101Date d'inscriptiondimanche 1 avril 2001StatutMembreDernière intervention18 février 2008 23 oct. 2006 à 08:18
Attention j'ai fais cette exemple juste pour prouver que du multi thread en VB 6 était possible, l'environnement de Debug est TRES instable. Utilise VB.net plus adapté
l0st3d
Messages postés205Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention13 novembre 2009 22 oct. 2006 à 21:14
#1 t'a source. Merci beaucoup!
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 août 2004 à 11:41
TerminateThread est une fonction d'URGENCE !!!
Ne doit jamais etre employe dans un code correct, un thread doit terminer proprement en retournant une valeur et liberer la memoire.
A la suite de TerminateThread il n'y a plus rien, stack initialisee non liberee, toute memoire allouee dans le thread idem (String vb est un bon exemple de memoire allouee dynamiquement et qui fuira a coup sur).
Les threads sont a employer dans un langage ou on peut les gerer, en VB absolument NON !!!
BruNews, Admin CS, MVP Visual C++
occhipin
Messages postés13Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention11 août 2004 2 août 2004 à 10:47
Bon je vous jure c'est mon dernier message sur ce poste ! Mais il me reste un problème qui peut etre peut s'expliquer tout simplement !
En fait dans un module j'ai mis les déclarations createthread, terminatethread .... en mettant public à la place de private (c'est pour ca que ca mettait function undefined). Dans ce meme module g ma fonction toto. Mais à l'execution g une erreur de violation d'accès, en faisant un débug il est clair que c a cause du thread l'erreur est générée sur toto ! Donc voilou dsl pour tte ses questions mais il est vitale pour moi de trouver une solution à mon problème et donc de voir si je pe le résoudre par les threads !!! Merci
occhipin
Messages postés13Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention11 août 2004 30 juil. 2004 à 15:08
ah dsl le addressOf fonctionne (enfin ne cause plus d'erreur !) mais maintenant c'est CreateThread qui est function or sub not defined alors que je l'ai bien déclarer en haut j'ai aussi essayé de mettre les déclarations ds un module mais rien à faire toujours cette erreur "Function or Sub not defined" !!!
occhipin
Messages postés13Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention11 août 2004 30 juil. 2004 à 14:55
Moi aussi j'ai un problème avec AddressOf. Pourtant j'ai mis deux "d" à adresse. mais il accepte pas Toto après !
Donc voila si qqn sait pourquoi ca me met invalide use of propertie !!!!
Merci
capoueidiablo
Messages postés316Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 1 février 20101 9 juil. 2004 à 16:16
Salut à tous,
J'aimerais savoir s'il est possible d'envoyer plusieurs paramètre a la fonction Threadée ?
ex :
public Function Fonctionthread (Val1 as truc, Val2 as machin, ....)
dans ce cas à quoi doit etre égal "lpParameter" dans la fonction de création du Thread ?
Merci [:)]
captaincav
Messages postés16Date d'inscriptionvendredi 2 août 2002StatutMembreDernière intervention18 janvier 2006 4 févr. 2004 à 10:18
merci pour tout ca :) vraiment :)
mais j'ai un petit soucis toutefois :/
J'utilise cette fonction de la facon suivante :
Public Function ma_fonction()
MsgBox ("pouette")
End Function
Public Function Thread()
Dim mhandle As Long
Dim lpThreadID As Long
mhandle = CreateThread(ByVal 0&, ByVal 0&, AddressOf ma_fonction, ByVal 0&, 0, lpThreadID)
Call TerminateThread(mhandle, ByVal 0&)
End Function
Public Sub Command1_Click()
Call Thread
End Sub
Toutefois, en faisant ainsi, ma fonction n'est pas executé (pas de pouette qui s'affiche :/)!! J'ai l'impression que le Thread se termine directement apres. Comment faire pour remédier à cela ? Ou alors j'utilise tres mal tout ca ?
Merci :)
cs_heine
Messages postés58Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention15 novembre 2006 16 janv. 2004 à 16:22
Bon j'ai réussi à exploiter ceci, je comprend pas trop mal le pricipe de fonctionement, mais j'ai toujours un soucis, pour tuer les threads on doit tuer l'application... :/ je pense qu'il faudrait pouvoir TUER et non mettre en pause le thread par le biais de son handle... à voir si c'est faisable, je v matter ca...
cs_heine
Messages postés58Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention15 novembre 2006 23 juin 2003 à 15:47
super interressant les threads, mais j'eprouve un soucis... j'ai un,e fonction liberant la mémoire vive:
Dim Mo as variant
Mo = 100
Mo = Mo * 1024 * 1024
call space (Mo)
voila ceci va liberer 100Mo de Ram, cependant je voulais fais une barre de progression, mais avant tout fodra utiliser ce syteme de threads qui m'a l'air cool, mais je voi pas koi faire... ;) kelkun pourait m'expliker ?
cs_gogomanu
Messages postés29Date d'inscriptionmardi 7 janvier 2003StatutMembreDernière intervention26 mars 2009 19 juin 2003 à 16:17
Excellent merci beaucoup ! J'ai besoin de faire un client serveur dont le serveur exécute des ordres, mais sans thread si le traitement n'est pas terminé il ne reçoit pas les autres demandes ! tu parles d'un serveur ! donc threads ! merci !
venomp
Messages postés1Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention11 mars 2003 11 mars 2003 à 09:32
Le prog fonctionne au poil..
Mais je n'arrive pas a l'adapter a un de mes prog existant..
Je suis Sur NT 4 sp6. Quand je modifie mon prog et que je le lance dans l'ADI tout fonctionne, mais quand je crée l'exe et que je l'execute, Dr watson fait des siennes.. comment résoudre le pbm.
Note: je me suis servi de la classe du projet.
cs_bdufay
Messages postés11Date d'inscriptionmercredi 13 mars 2002StatutMembreDernière intervention29 mars 2006 16 janv. 2003 à 11:43
Nickel!
cs_Ouneufe
Messages postés60Date d'inscriptionmardi 4 septembre 2001StatutMembreDernière intervention19 janvier 2009 7 janv. 2003 à 12:56
Rhaaaaaa, enfin une demo de thread ciselée et complète. Ouh là, je me sens défaillir de bonheur. hop : 10/10
cs_TheDjinn
Messages postés10Date d'inscriptiondimanche 5 mai 2002StatutMembreDernière intervention10 novembre 2002 10 déc. 2002 à 22:52
bdpatrice : met tout dans un module
met un 2e d a adDress (jcroit kon peut escuser sephiro pour ca kan mm ;) )
le multi thread ca tu en tout cas un grand merci a sephiro ;)
cs_TheDjinn
Messages postés10Date d'inscriptiondimanche 5 mai 2002StatutMembreDernière intervention10 novembre 2002 2 déc. 2002 à 22:16
ya pas sephiro, jte kif trop ;)
sof ke la cuila jsuis pas sur ki me serve tout de suite, jai pas besoin de multithread dans mon 'shell'... ;)
bdpatrice
Messages postés11Date d'inscriptionmardi 23 juillet 2002StatutMembreDernière intervention 1 juillet 2003 21 nov. 2002 à 16:54
j'ai une erreur de compilation sur le parametre "Toto" il ne veux pas le prendre
AdressOf Toto
comment faudrait-il l'écrire?
cs_jenlain
Messages postés2Date d'inscriptionjeudi 25 avril 2002StatutMembreDernière intervention28 octobre 2002 28 oct. 2002 à 18:48
ca marche pas, ton truc
couriousous
Messages postés68Date d'inscriptionlundi 21 mai 2001StatutMembreDernière intervention 4 janvier 2003 2 oct. 2002 à 21:39
ok compris! ( named pipe? comme sous linux dans le shell?)
cs_sephiro
Messages postés101Date d'inscriptiondimanche 1 avril 2001StatutMembreDernière intervention18 février 2008 1 oct. 2002 à 19:13
Pour savoir si ton thread est toujours la tu peux utiliser une API qui va te lister les handles ou les ID.
De plus à la fin de ta function Toto, le thread se termine. Si tu veux qu'il reste il est obligatoire de faire une boucle pour l'empécher de sortir.
cs_sephiro
Messages postés101Date d'inscriptiondimanche 1 avril 2001StatutMembreDernière intervention18 février 2008 1 oct. 2002 à 19:09
La function Toto ne retourne rien , elle peut recevoir de parametre pendant son lancement, voir createThread et pParameter.
Le thread peut accéder au variable du thread parent (celui qui l'a lancé) il peut donc retourner tous ce que l'on veux. Il est possible de faire discuter plusieurs thread entre eux, via des Named Pipes (Je prepare un truc la dessus), ainsi qu'un Zip d'exemple.
Le gros probleme avec les threads sont leurs instabilités dans le debugger de VB, de plus il est impératif d'analyser votre probleme avant de commancer à utiliser les threads car vous etes tres vite submergé !!!!
cs_sephiro
Messages postés101Date d'inscriptiondimanche 1 avril 2001StatutMembreDernière intervention18 février 2008 1 oct. 2002 à 19:08
La function Toto ne retourne rien , elle peut recevoir de parametre pendant son lancement, voir createThread et pParameter.
Le thread peut accéder au variable du thread parent (celui qui l'a lancé) il peut donc retourner tous ce que l'on veux. Il est possible de faire discuter plusieurs thread entre eux, via des Named Pipes (Je prepare un truc la dessus), ainsi qu'un Zip d'exemple.
Le gros probleme avec les threads sont leurs instabilités da
couriousous
Messages postés68Date d'inscriptionlundi 21 mai 2001StatutMembreDernière intervention 4 janvier 2003 1 oct. 2002 à 18:39
juste comme ca on peut récupérer la variable que retourne la fonction? ex:
function toto() as integer
si on la démarre avec un thread, peut-on récupérer la variable retournée au aussi: c'est comment qu'on sait que le tread à finit son action?
Thanks!
couriousous
Messages postés68Date d'inscriptionlundi 21 mai 2001StatutMembreDernière intervention 4 janvier 2003 1 oct. 2002 à 18:34
Enfin! Vla le chti bou de code que je cherche depuis 6 mois!!! en + les explications sont cool! juste une chite question, j'ai lu quekpar que si on met un doevents dans la fonction threadée, le thread est détruit ( ou se stope ) c juste ou faux?
cs_zmat
Messages postés13Date d'inscriptionlundi 26 novembre 2001StatutMembreDernière intervention29 octobre 2002 1 oct. 2002 à 14:53
Si je comprend bien, les threads ça m'permet de faire du multitâche avec mon appli vb ... !? si c bien ça, ça'm donne une idée des avantages mais ...
Quels sont les inconvénients des threads et surtout qu'est ce que je risque en les utilisant ?
Merci pour les explications
En passant, s'rait cool de poster un zip là dessus
cs_Mix78
Messages postés1Date d'inscriptionsamedi 8 septembre 2001StatutMembreDernière intervention 1 octobre 2002 1 oct. 2002 à 09:30
Un thread est un processus asynchrone auquel votre processeur accorde du temps d'éxecution...
C'est un peu comme quand vous mettez un Doevents dans votre code, si de instructions sont en attente la machine virtuelle de VB les executera avant de revenir au code après le Doevents... Le thread permet qu'une ou plusieurs fonctions de votre projet soient éxécutée de manière concurente au reste du code.
En pratique quand vous entrez dans une fonction VB vous n'en sortirez pas tant que le code de la fonction ne sera pas éxécuté; mais vous pouvez lancer une autre fonction (Thread) et resortir de la première fonction sans que le code de cette fonction appellée soit totalement executé... Le code de la fonction threadée continura sont execution de son coté...
Voilà ,j'éspère que cette explication n'est pas trop mal expliquée :-)
cs_Crazyht
Messages postés1522Date d'inscriptionmardi 18 décembre 2001StatutMembreDernière intervention21 août 20108 1 oct. 2002 à 09:24
Alors un Thread se comporte comme un executable. Je m'explique, c'est une partie de code qui se deroule paralellement au reste de lexecutable. Il a l'avantage de partager les variables globales avec le programme principal (Qui est en fait lui aussi un thread). Ca a l'avantage de ne pas bloquer le programme lors d'un traitement. A titre d'exemple le module de recherche sous Word est un thread. Nous pouvons aussi siter les logiciels FTP, qui effectuent plusieurs transferts en simultanés.L'interface est le programme et chaque transfert est effectué dans un thread.
Voila en gros
@++
Crazyht
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 1 oct. 2002 à 01:43
Tu devrais donner plus de détail du genre c'est quoi un thread, a quoi sa sert un thread, quel avantage sa donne etc.......
cs_zmat
Messages postés13Date d'inscriptionlundi 26 novembre 2001StatutMembreDernière intervention29 octobre 2002 30 sept. 2002 à 23:41
Bsoir,
Juste une petite kestion : c koi un thread ? :-/
cs_sephiro
Messages postés101Date d'inscriptiondimanche 1 avril 2001StatutMembreDernière intervention18 février 2008 30 sept. 2002 à 12:27
Attention c'est tres instable sous VB avec le Debugger, une fois compilé pas de probleme, ne pas oublier de détruire TOUS les threads que vous avez créé.
Il est bien sur possible de créé plusieurs thread avec la meme function
mHandle1 = CreateThread(0, 0, AdressOf Toto, 0, 0, lpThreadID1)
mHandle2 = CreateThread(0, 0, AdressOf Toto, 0, 0, lpThreadID2)
mHandle3 = CreateThread(0, 0, AdressOf Toto, 0, 0, lpThreadID3)
1 mai 2010 à 16:07
Voir la source :
http://www.vbfrance.com/codes/SIMPLE-PROGRAMME-MULTI-THREAD_5590.aspx
30 mars 2010 à 11:21
J'ai mon programme dans un thread(cloisonné) "thA". Ce programme possède une fenetre sur laquelle il y a une imagebox "ImgB"
J'ai pu constaté que entre threads je ne peut pas utiliser de variables globales (ou presque).
Est-ce que en récupérant le DC de l'ImgB je pourrais le modifier depuis un Thread cloisonné thB sans avoir de conflict de droit d'accès ?
18 mars 2010 à 10:03
si je peux pas piloter la fenetre de puis un thread secondair, je n'ai qu'a mettre Excel en thread secondaire et laisser la gestion de la fenetre dans le thread principal...
ca marche tt de suite mieux ...
je me suis entêté dans la mesure ou il est dificile de lancer l'animation dans un autre EXE. l'annimation est intégré dans le "disign" de l'appli...
Raison trouvée : VB6 Standard EXE travail avec un(des) threads cloisonnés qui interdisent l'emploie de variables globales.
J'ai également vu dans un tuto que il faudrait compiler en "P-CODE" je ne sais pas ce que c mais ca ne m'a rien changé du tout...
17 mars 2010 à 16:32
mailslot, pipe, socket, messages, etc.
[mode pub on]
ou via cette petite source :
http://www.vbfrance.com/codes/COMMUNICATION-INTER-PROCESS-PARTAGE-MEMOIRE_39615.aspx
17 mars 2010 à 16:04
encore que je trouvais ma solution vraiment classe ^^
(ps comment tu communique entre 2 app ?)
17 mars 2010 à 14:04
lance un exe a part qui affiche l'animation...
en communiquant avec lui, tu pourras lui faire afficher un message t'indiquant l'avancement, etc.
une fois ton traitement finit, te suffira de le killer.
c'est le plus simple et surtout le plus propre en VB6
17 mars 2010 à 13:55
mais la pas possible.
mais concidère que l'application travaille sur un fichier excel servant de "base de donnée" (c franchement moche mais je n'ai pas le choix, c'est une base qui existe depuis bien longtemps)
--> 40K lignes à traiter. les traitements mêmes pris séparément prennent plus de temps que voulu (en plus ce ne sont pas des bêtes de courses les machines qu'ont les utilisateurs ...)
et il n'y a pas que les actions excel. il y a aussi la copie en local du fichier (ca peut prendre du temps vu que le fichier est sur un reseau ...) etc
c'est pourquoi la solution du multithread pour l'animation me semblait pas mal ^^
17 mars 2010 à 13:17
UNE opération Excel, ou l'enchainement de commandes de pilotage de Excel ?
parceuq esi tu colles des DoEvents dans ton code, ton thread peut très bien etre remplacé par un Timer qui mettra a jour ton animation...
17 mars 2010 à 13:08
J'ai utilisé un thread comme ci dessus pour annimer un sablier pendant des traitements excel en VB6 (automation).
En effet, lors de certains traitements, le temps mis peut être long (pls 10 aines de secondes). Or, quand un traitement est long a faire, il faut rassurer l'utilisateur en lui metant sous le nez quelque chose qui montre qu'une tâche est bien en cours.
J'ai donc mon Apli qui instancie Excel et effectue des traitements. et un nouveau thread qui fait :
Public Function FNC_THREAD_1()
On Error GoTo erreur
'/!\ jamais de Doevents dans un thread hein ^^
Do
'faire tourner l'image
Current_Img = (Current_Img Mod frmQuBES.IMG.ListImages.Count) + 1
Set frmQuBES.I.Picture = frmQuBES.IMG.ListImages(Current_Img).Picture
'faire une pause
Sleep 250
Loop While True 'faire a l'infini
erreur:
Stop_Thread
End Function
avec
Private ThreadControl1 As clsThreading
Private Current_Img As Integer
Public Sub Start_Thread()
'Init variable
Current_Img = 1
Set frmQuBES.I.Picture = frmQuBES.IMG.ListImages(Current_Img).Picture
Dim mThreadPriority As Long
mThreadPriority = tpAboveNormal
Dim mEnabled As Boolean
mEnabled = True
'Creation du thread
Set ThreadControl1 = New clsThreading
ThreadControl1.CreateNewThread AddressOf FNC_THREAD_1, mThreadPriority, mEnabled
End Sub
Public Sub Stop_Thread()
ThreadControl1.TerminateCurrentThread
End Sub
le problème est le suivant :
en mode d'éxécution sous VBE tout se passe comme voule.Excel tourne et mon sablier tourne aussi.
en revanche, lorsque je génère l'executable (pas de probleme de compilation) et que je l'execute la ca ne marche plus. Le thread principal tourne normalement mais le thread d'annimation (thread ajouté) génère une popup "Violation d'accès en écriture...blablabla"
Et bien sur l'annimation ne marche pas.
pour information, la fenetre frmQuBES est en ShowModal 1
si une personne a une idée d'ou ca peut venir ...
23 oct. 2006 à 08:18
22 oct. 2006 à 21:14
2 août 2004 à 11:41
Ne doit jamais etre employe dans un code correct, un thread doit terminer proprement en retournant une valeur et liberer la memoire.
A la suite de TerminateThread il n'y a plus rien, stack initialisee non liberee, toute memoire allouee dans le thread idem (String vb est un bon exemple de memoire allouee dynamiquement et qui fuira a coup sur).
Les threads sont a employer dans un langage ou on peut les gerer, en VB absolument NON !!!
BruNews, Admin CS, MVP Visual C++
2 août 2004 à 10:47
En fait dans un module j'ai mis les déclarations createthread, terminatethread .... en mettant public à la place de private (c'est pour ca que ca mettait function undefined). Dans ce meme module g ma fonction toto. Mais à l'execution g une erreur de violation d'accès, en faisant un débug il est clair que c a cause du thread l'erreur est générée sur toto ! Donc voilou dsl pour tte ses questions mais il est vitale pour moi de trouver une solution à mon problème et donc de voir si je pe le résoudre par les threads !!! Merci
30 juil. 2004 à 15:08
30 juil. 2004 à 14:55
Donc voila si qqn sait pourquoi ca me met invalide use of propertie !!!!
Merci
9 juil. 2004 à 16:16
J'aimerais savoir s'il est possible d'envoyer plusieurs paramètre a la fonction Threadée ?
ex :
public Function Fonctionthread (Val1 as truc, Val2 as machin, ....)
dans ce cas à quoi doit etre égal "lpParameter" dans la fonction de création du Thread ?
Merci [:)]
4 févr. 2004 à 10:18
mais j'ai un petit soucis toutefois :/
J'utilise cette fonction de la facon suivante :
Public Function ma_fonction()
MsgBox ("pouette")
End Function
Public Function Thread()
Dim mhandle As Long
Dim lpThreadID As Long
mhandle = CreateThread(ByVal 0&, ByVal 0&, AddressOf ma_fonction, ByVal 0&, 0, lpThreadID)
Call TerminateThread(mhandle, ByVal 0&)
End Function
Public Sub Command1_Click()
Call Thread
End Sub
Toutefois, en faisant ainsi, ma fonction n'est pas executé (pas de pouette qui s'affiche :/)!! J'ai l'impression que le Thread se termine directement apres. Comment faire pour remédier à cela ? Ou alors j'utilise tres mal tout ca ?
Merci :)
16 janv. 2004 à 16:22
23 juin 2003 à 15:47
Dim Mo as variant
Mo = 100
Mo = Mo * 1024 * 1024
call space (Mo)
voila ceci va liberer 100Mo de Ram, cependant je voulais fais une barre de progression, mais avant tout fodra utiliser ce syteme de threads qui m'a l'air cool, mais je voi pas koi faire... ;) kelkun pourait m'expliker ?
19 juin 2003 à 16:17
11 mars 2003 à 09:32
Mais je n'arrive pas a l'adapter a un de mes prog existant..
Je suis Sur NT 4 sp6. Quand je modifie mon prog et que je le lance dans l'ADI tout fonctionne, mais quand je crée l'exe et que je l'execute, Dr watson fait des siennes.. comment résoudre le pbm.
Note: je me suis servi de la classe du projet.
16 janv. 2003 à 11:43
7 janv. 2003 à 12:56
10 déc. 2002 à 22:52
met un 2e d a adDress (jcroit kon peut escuser sephiro pour ca kan mm ;) )
le multi thread ca tu en tout cas un grand merci a sephiro ;)
2 déc. 2002 à 22:16
sof ke la cuila jsuis pas sur ki me serve tout de suite, jai pas besoin de multithread dans mon 'shell'... ;)
21 nov. 2002 à 16:54
j'ai une erreur de compilation sur le parametre "Toto" il ne veux pas le prendre
AdressOf Toto
comment faudrait-il l'écrire?
28 oct. 2002 à 18:48
2 oct. 2002 à 21:39
1 oct. 2002 à 19:13
De plus à la fin de ta function Toto, le thread se termine. Si tu veux qu'il reste il est obligatoire de faire une boucle pour l'empécher de sortir.
1 oct. 2002 à 19:09
Le thread peut accéder au variable du thread parent (celui qui l'a lancé) il peut donc retourner tous ce que l'on veux. Il est possible de faire discuter plusieurs thread entre eux, via des Named Pipes (Je prepare un truc la dessus), ainsi qu'un Zip d'exemple.
Le gros probleme avec les threads sont leurs instabilités dans le debugger de VB, de plus il est impératif d'analyser votre probleme avant de commancer à utiliser les threads car vous etes tres vite submergé !!!!
1 oct. 2002 à 19:08
Le thread peut accéder au variable du thread parent (celui qui l'a lancé) il peut donc retourner tous ce que l'on veux. Il est possible de faire discuter plusieurs thread entre eux, via des Named Pipes (Je prepare un truc la dessus), ainsi qu'un Zip d'exemple.
Le gros probleme avec les threads sont leurs instabilités da
1 oct. 2002 à 18:39
function toto() as integer
si on la démarre avec un thread, peut-on récupérer la variable retournée au aussi: c'est comment qu'on sait que le tread à finit son action?
Thanks!
1 oct. 2002 à 18:34
1 oct. 2002 à 14:53
Quels sont les inconvénients des threads et surtout qu'est ce que je risque en les utilisant ?
Merci pour les explications
En passant, s'rait cool de poster un zip là dessus
1 oct. 2002 à 09:30
C'est un peu comme quand vous mettez un Doevents dans votre code, si de instructions sont en attente la machine virtuelle de VB les executera avant de revenir au code après le Doevents... Le thread permet qu'une ou plusieurs fonctions de votre projet soient éxécutée de manière concurente au reste du code.
En pratique quand vous entrez dans une fonction VB vous n'en sortirez pas tant que le code de la fonction ne sera pas éxécuté; mais vous pouvez lancer une autre fonction (Thread) et resortir de la première fonction sans que le code de cette fonction appellée soit totalement executé... Le code de la fonction threadée continura sont execution de son coté...
Voilà ,j'éspère que cette explication n'est pas trop mal expliquée :-)
1 oct. 2002 à 09:24
Voila en gros
@++
Crazyht
1 oct. 2002 à 01:43
30 sept. 2002 à 23:41
Juste une petite kestion : c koi un thread ? :-/
30 sept. 2002 à 12:27
Il est bien sur possible de créé plusieurs thread avec la meme function
mHandle1 = CreateThread(0, 0, AdressOf Toto, 0, 0, lpThreadID1)
mHandle2 = CreateThread(0, 0, AdressOf Toto, 0, 0, lpThreadID2)
mHandle3 = CreateThread(0, 0, AdressOf Toto, 0, 0, lpThreadID3)