PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → ThreadExecute avec <Procédure wLangage> variable
ThreadExecute avec <Procédure wLangage> variable
Débuté par Sylvain RICAU, 30 mar. 2017 09:33 - 2 réponses
Membre enregistré
88 messages
Popularité : +2 (4 votes)
Posté le 30 mars 2017 - 09:33
Bonjour,

Je souhaiterais pouvoir lancer des threads de méthode d'une classe en utilisant une seule méthode LanceThread et non une méthode pour chaque méthode à lancer en Thread.

Procedure LanceThread(IndiceThreadAlancer,NbParametre=0)
ThreadALancer est STThreadALancer=gtabThreadALancer[IndiceThreadAlancer]
//Procédure_ALancer est une chaine
SELON NbParametre
CAS 1
ThreadExecute(ThreadALancer.Nom,ThreadALancer.Options_Lancement,ThreadALancer.Procédure_ALancer,ThreadALancer.Paramétre1,ThreadALancer.Paramétre2,ThreadALancer.Paramétre3)
CAS 2
ThreadExecute(ThreadALancer.Nom,ThreadALancer.Options_Lancement,ThreadALancer.Procédure_ALancer,ThreadALancer.Paramétre1,ThreadALancer.Paramétre2,ThreadALancer.Paramétre3)
CAS 3
ThreadExecute(ThreadALancer.Nom,ThreadALancer.Options_Lancement,ThreadALancer.Procédure_ALancer,ThreadALancer.Paramétre1,ThreadALancer.Paramétre2,ThreadALancer.Paramétre3)
CAS 4
ThreadExecute(ThreadALancer.Nom,ThreadALancer.Options_Lancement,ThreadALancer.Procédure_ALancer,ThreadALancer.Paramétre1,ThreadALancer.Paramétre2,ThreadALancer.Paramétre3,ThreadALancer.Paramétre4)
FIN


SI j'appelle Thread_Lance avec gtabThreadALancer.Procédure_ALancer="Essai" (Essai est une méthode non globale de la classe, j'ai le message d'erreur suivant à l'éxécution :

Erreur à la ligne 11 du traitement Méthode LanceThread.
Vous avez appelé la fonction ThreadExécute.
La procédure 'Essai' est inconnue.

Alors que :

- la méthode "Essai" existe bien dans la classe
- l'exécution de ThreadExécute(ThreadALancer.Nom,ThreadALancer.Options_Lancement,Essai,ThreadALancer.Paramétre1,ThreadALancer.Paramétre2,ThreadALancer.Paramétre3) ne provoque pas d'erreur

Y a t il moyen d'arriver à mes fins ?

Merci d'avance
Membre enregistré
256 messages
Popularité : +29 (29 votes)
Posté le 30 mars 2017 - 11:20
Bonjour

Il y a un petit cas particulier pour les méthodes, il faut préfixer le nom de la méthode par ":"
Vous pouvez également utiliser les procédures à nombres de paramètres variables.

Exemple de classe
Procedure M1()
Trace("M1")

Procedure M2(x)
Trace("M2 : "+x)

Procedure Lance(Thread,Option,Méthode,*)
ThreadExecute(Thread,Option,":"+Méthode,MesParamètres[4 A])


Exemple d'appel
o.Lance("T1",threadNormal,"M1")
o.Lance("T2",threadNormal,"M2","P")
Membre enregistré
88 messages
Popularité : +2 (4 votes)
Posté le 30 mars 2017 - 11:48
Merci Yann pour ces réponses qui m'ont permis de résoudre mon problème