Multi thread

Soyez le premier à donner votre avis sur cette source.

Vue 21 662 fois - Téléchargée 2 439 fois

Description

Documentation de base pour utiliser les API multithread

'Creation d'un thread
CreateThread (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long

lpThreadAttributes: sécurité, mettre 0
dwStackSize : taille de la pile, 0 => meme taille que la pile du thread parent
lpStartAddress: adresse de la fonction à lancer.
exemple:
soit une function Toto()
lpStartAddress=AddressOf Toto, AdressOf donne simplement l'adresse de cette fonction.

lpParameter: parametre de la function, il faut savoir que votre thread partage les variables du thread parent.
dwCreationFlags: Permet de controler le thread, il est possible de créé un thread sans pour cela l'executer,
si dwCreationFlags=&H4 il est créé mais en attente. Si =0 il est executer imediatement
lpThreadID: pointeur sur l'ID du thread

La fonction retourne l'Handle du thread créé, si Null erreur.

'Destruction d'un thread
TerminateThread (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
hThread: handle du thread (donner au moment de la creation)
dwExitCode: mettre 0.

'Changer la prioritée d'un thread
SetThreadPriority (ByVal hThread As Long, ByVal nPriority As Long) As Long
Il est possible de rendre plus ou moins prioritaire votre thread, un thread d'affichage sera Low, un thread de communication sera hight, Low=-2, Normal =0, Hight =2
Au moment de la creation la priorité d'un thread = priorité thread Parent.

'Connaitre la prioritée d'un thread
Function GetThreadPriority (ByVal hThread As Long) As Long
Donne la prioritée du thread

'Execute le thread
ResumeThread (ByVal hThread As Long) As Long
Permet d'executer un thread, s'il a été créé avec un Flag =Attente, cette API permet de l'executer

'Stop un thread
SuspendThread (ByVal hThread As Long) As Long
Fonction inverse de la précedente

'Donne le handle du thread en cours
GetCurrentThread () As Long

'Donne l'ID du thread en cours
GetCurrentThreadId () As Long

Source / Exemple :


'Exemple: 

'Déclaration des API
Private Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long

Private Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long

Private Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As Long

Private Declare Function GetThreadPriority Lib "kernel32" (ByVal hThread As Long) As Long

Private Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long

Private Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long

Private Declare Function GetCurrentThread Lib "kernel32" () As Long

Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long

public function Thread ()
 dim mhandle as long 
 dim lpThreadID as long

'Creation du thread
    	mHandle = CreateThread(ByVal 0&, ByVal 0&, AdressOf Toto, ByVal 0&, 0, lpThreadID)

'Connaitre la prioritée du thead créé
 	Priority = GetThreadPriority(mhandle)

'Mettre une prioritée plus importante
	Call SetThreadPriority(mhandle, 2)

'Fin du thread
    Call TerminateThread(mhandle, ByVal 0&)
end function

function Toto()
'Mettre le code que vous voulez
end function

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_sephiro
Messages postés
101
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
18 février 2008
-
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)
cs_zmat
Messages postés
13
Date d'inscription
lundi 26 novembre 2001
Statut
Membre
Dernière intervention
29 octobre 2002
-
Bsoir,
Juste une petite kestion : c koi un thread ? :-/
cs_max12
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014
-
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_Crazyht
Messages postés
1523
Date d'inscription
mardi 18 décembre 2001
Statut
Modérateur
Dernière intervention
21 août 2010
4 -
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_Mix78
Messages postés
1
Date d'inscription
samedi 8 septembre 2001
Statut
Membre
Dernière intervention
1 octobre 2002
-
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 :-)

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.