Question [Résolu] Besoin d'aide sur le multithread

Plus d'informations
il y a 9 ans 11 mois #21939 par Florent
Bonjour,

J'ai besoin d'un eclaircissement sur le multithread en powershell. Je travaille sur le script d'un collègue, qui utilise la structure suivante :
-Un thread master qui ouvre les trois thread du dessous
-Un thread pour la GUI
-Un thread pour l'engine
-Un thread pour un timer

Les threads sont construit ainsi :
[code:1]Function StartRunSpaceForGui {

#-Creation et démarrage d'un RunSpace pour l'interface graphique.
$global:RunSpaceForGui=[runspacefactory]::CreateRunspace()
$global:RunSpaceForGui.ApartmentState=\"STA\"
$global:RunSpaceForGui.ThreadOptions=\"ReuseThread\"
$global:RunSpaceForGui.Open()

$global:HashForGui=[hashtable]::«»Synchronized(@{})
$global:RunSpaceForGui.SessionStateProxy.SetVariable(\"HashForGui\",$HashForGui)

$global:«»ScriptForGui=[PowerShell]::Create().AddScript(\"$global:«»ProductPath\PS\Gui.ps1\"«»)
$global:«»ScriptForGui.RunSpace=$RunSpaceForGui
$global:HandleForGui=$ScriptForGui.BeginInvoke()
}

Function StartRunSpaceForEngine {

#-Creation et démarrage d'un RunSpace pour l'Engine
#
$global:RunSpaceForEngine=[runspacefactory]::CreateRunspace()
$global:RunSpaceForEngine.Open()

$global:«»ScriptForEngine=[PowerShell]::Create().AddScript(\"$global:«»ProductPath\PS\Engine.ps1\"«»)
$global:«»ScriptForEngine.RunSpace=$RunSpaceForEngine
$global:HandleForEngine=$ScriptForEngine.BeginInvoke()
}

Function StartRunSpaceForTimer {

#-Creation et démarrage d'un RunSpace pour le Timer
#
$global:RunSpaceForTimer=[runspacefactory]::CreateRunspace()
$global:RunSpaceForTimer.Open()

$global:«»ScriptForTimer=[PowerShell]::Create().AddScript(\"$global:«»ProductPath\PS\Timer.ps1\"«»)
$global:«»ScriptForTimer.RunSpace=$RunSpaceForTimer
$global:HandleForTimer=$ScriptForTimer.BeginInvoke()
}[/code:1]

L'idée étant qu'une fois la GUI construire via le premier thread, le thread engine débute et effectue une série d'étapes constituées de scripts. Une fois qu'une étape est terminée, le thread engine en informe le thread GUI. Je dois pouvoir informer étape par étape.

Je ne suis pas sûr que dans cette construction, je puisse faire communiquer les threads entre eux. Par exemple, je ne peux pas écrire dans la console à partir du thread engine, pour dire qu'une étape s'est bien passée.

En plus je dois pouvoir le faire a chaque fin d'étape.

En vous remerciant<br><br>Message édité par: Arnaud, à: 16/06/16 11:03

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 11 mois #21941 par xyz
Réponse de xyz sur le sujet Re:Besoin d'aide sur le multithread
Regarde les events .

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 11 mois #21945 par Florent
Réponse de Florent sur le sujet Re:Besoin d'aide sur le multithread
Merci. En fait ce qui me pose problème, c'est que dans cette construction, on a un thread \&quot;engine\&quot; qui execute donc les fonctions pour valider les séquences.

Il me semble plus logique de supprimer ce thread et d'executer ces actions dans le host en gardant la partie GUI dans un thread séparé. Le timer aussi, à la rigueur. Mais là j'ai l'impression qu'il ne sert a rien d'appeler dans le thread $host un thread $engine dont la fonction se ressemble finalement.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 9 ans 11 mois #21948 par Florent
Réponse de Florent sur le sujet Re:Besoin d'aide sur le multithread
En fait j'ai trouvé une autre solution qui est d'utiliser une hashtable commune à mes threads. Avec une temporisation d'une seconde pour laisser le temps a la gui de bien se charger. Cela fonctionne.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.039 secondes
Propulsé par Kunena