Question Thread et ressources allouées à un seul process
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 13 ans 4 mois #13086
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Thread et ressources allouées à un seul process
Laurent Dardenne écrit:
Et tu seras tjr dans un runspace qui ne peut exécuter qu'un seul pipeline.
bidouilles écrit:
Ce que je voulais dire c'est qu'il n'y pas de pb dans ce contexte, ensuite que tu souhaites avoir un autre comportement c'est autre chose.
Voir aussi ce post .
Alors, ce qui se passe c'est que tu stoppes le thread de la fenêtre, la gestion des messages win32, dans le thread du pipeline. Il y a donc deux thread, et celui de PS semble prioritaire.Salut, je ne vois pas de pb de freeze avec ton code
Et tu seras tjr dans un runspace qui ne peut exécuter qu'un seul pipeline.
bidouilles écrit:
Non, voir ce tutoriel .il y a l’ère vraiment d'avoir un problème de gestions de ressources pour
Ce que je voulais dire c'est qu'il n'y pas de pb dans ce contexte, ensuite que tu souhaites avoir un autre comportement c'est autre chose.
Voir aussi ce post .
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 13 ans 4 mois #13087
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Thread et ressources allouées à un seul process
Matthew BETTON écrit:
+1Pour moi c'est OK
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- JJ
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
il y a 13 ans 3 mois #13138
par JJ
Réponse de JJ sur le sujet Re:Thread et ressources allouées à un seul process
merci on est effectivement obligé d'avoir 2 Thread:
celui de base qui gère l'affichage de l'application d'acceuil dans le host, le formumlire en d'autre termes.
et celui qui fait le traitement pour lequel on affiche un nouveau progressBar
la deuxième progress bar s'affiche maintenant car le process n'est plus occupé à 100% pour le traitement à faire (Start-Sleep pour notre exemple)
depuis PowerShell 2 cela est devenu tres simple avec les job
Par contre pour l'exemple je ne fait qu'un Start-Sleep mais si je veux accéder au formulaire (thread 1) à partir du job (thread 2) je ne vois pas comment faire à part attendre la fin du traitement en réceptionnant des données.
Auriez vous une idée svp?
voir essentiellement le code entre ####################################################
[code:1]
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname(\"System.Windows.Forms\"«») | Out-Null
[reflection.assembly]::loadwithpartialname(\"System.Drawing\"«») | Out-Null
#endregion
[System.Windows.Forms.Application]::EnableVisualStyles()
####################################################
#[System.Windows.Forms.Application]::«»DoEvents()
##################################################
$frm_Main = New-Object System.Windows.Forms.Form
$btn_Export = New-Object System.Windows.Forms.Button
$lbl_Result = New-Object System.Windows.Forms.Label
$progressBar1 = New-Object System.Windows.Forms.ProgressBar
$progressBar2 = New-Object System.Windows.Forms.ProgressBar
####################################################
$btn_Export_OnClick =
{
Write-Host 'Test-Button was clicked'
$progressBar2.Visible = $true
$lbl_Result.Text = \"Veuillez patienter...\"
#$btn_Export.Enabled = $false
$Job = Start-Job {
Start-Sleep -Milliseconds 2000
}
Register-ObjectEvent -InputObject $Job -EventName StateChanged `
-Action {
#Start-Sleep -Seconds 1
Write-Host '*Event-Action*'
$progressBar2.Visible = $false
$lbl_Result.Text = \"Ok\"
}
}
####################################################
#region Formulaire
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 435
$System_Drawing_Size.Height = 550
$frm_Main.ClientSize = $System_Drawing_Size
$frm_Main.StartPosition = \"CenterScreen\"
$frm_Main.MaximizeBox = $false;
$frm_Main.MinimizeBox = $false;
#endregion
#region ProgressBar
$progressBar1.Location = new-object System.Drawing.Point(5,15)
$progressBar1.Size = New-Object System.Drawing.Size(425,30)
$progressBar1.Name = \"progressBar1\"
$progressBar1.Style = 'Marquee'
$progressBar1.Step = 20
$progressBar1.Visible = $true
$frm_Main.Controls.Add($progressBar1)
$progressBar2.Location = new-object System.Drawing.Point(5,215)
$progressBar2.Size = New-Object System.Drawing.Size(425,30)
$progressBar2.Name = \"progressBar1\"
$progressBar2.Style = 'Marquee'
$progressBar2.Step = 20
$progressBar2.Visible = $false
$frm_Main.Controls.Add($progressBar2)
#endregion
#region Bouton - Lancement
$btn_Export.TabIndex = 16
$btn_Export.Name = 'btn_Export'
$btn_Export.Size = New-Object System.Drawing.Size(425,30)
$btn_Export.Location = New-Object System.Drawing.Point(5,515)
$btn_Export.UseVisualStyleBackColor = $True
$btn_Export.Visible = $true
$btn_Export.Text = 'Ici'
$btn_Export.add_Click($btn_Export_OnClick)
$frm_Main.Controls.Add($btn_Export)
#endregion
#region Label - Result
$lbl_Result.Font = new-object System.Drawing.Font('Verdana', 10, [System.Drawing.FontStyle]::Bold, [System.Drawing.GraphicsUnit]::«»Point,0)
$lbl_Result.Size = New-Object System.Drawing.Size(435,35)
$lbl_Result.Location = new-object System.Drawing.Point(5,475)
$lbl_Result.TextAlign = [System.Drawing.ContentAlignment]::MiddleCenter
$lbl_Result.Forecolor = [System.Drawing.Color]::Green
$lbl_Result.Name = 'lbl_Result'
$lbl_Result.Text = 'Cliquer'
$frm_Main.Controls.Add($lbl_Result)
#endregion
#Save the initial state of the form
$InitialFormWindowState = $frm_Main.WindowState
#Show the Form
#$frm_Main.ShowDialog()| Out-Null
#->
##################################################
$frm_Main.Show()
while ($frm_Main.Visible)
{
[System.Windows.Forms.Application]::«»DoEvents()
}
##################################################
[/code:1]
Message édité par: bidouilles, à: 28/11/12 10:42
Message édité par: bidouilles, à: 28/11/12 10:43<br><br>Message édité par: bidouilles, à: 28/11/12 11:20
celui de base qui gère l'affichage de l'application d'acceuil dans le host, le formumlire en d'autre termes.
et celui qui fait le traitement pour lequel on affiche un nouveau progressBar
la deuxième progress bar s'affiche maintenant car le process n'est plus occupé à 100% pour le traitement à faire (Start-Sleep pour notre exemple)
depuis PowerShell 2 cela est devenu tres simple avec les job
Par contre pour l'exemple je ne fait qu'un Start-Sleep mais si je veux accéder au formulaire (thread 1) à partir du job (thread 2) je ne vois pas comment faire à part attendre la fin du traitement en réceptionnant des données.
Auriez vous une idée svp?
voir essentiellement le code entre ####################################################
[code:1]
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname(\"System.Windows.Forms\"«») | Out-Null
[reflection.assembly]::loadwithpartialname(\"System.Drawing\"«») | Out-Null
#endregion
[System.Windows.Forms.Application]::EnableVisualStyles()
####################################################
#[System.Windows.Forms.Application]::«»DoEvents()
##################################################
$frm_Main = New-Object System.Windows.Forms.Form
$btn_Export = New-Object System.Windows.Forms.Button
$lbl_Result = New-Object System.Windows.Forms.Label
$progressBar1 = New-Object System.Windows.Forms.ProgressBar
$progressBar2 = New-Object System.Windows.Forms.ProgressBar
####################################################
$btn_Export_OnClick =
{
Write-Host 'Test-Button was clicked'
$progressBar2.Visible = $true
$lbl_Result.Text = \"Veuillez patienter...\"
#$btn_Export.Enabled = $false
$Job = Start-Job {
Start-Sleep -Milliseconds 2000
}
Register-ObjectEvent -InputObject $Job -EventName StateChanged `
-Action {
#Start-Sleep -Seconds 1
Write-Host '*Event-Action*'
$progressBar2.Visible = $false
$lbl_Result.Text = \"Ok\"
}
}
####################################################
#region Formulaire
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 435
$System_Drawing_Size.Height = 550
$frm_Main.ClientSize = $System_Drawing_Size
$frm_Main.StartPosition = \"CenterScreen\"
$frm_Main.MaximizeBox = $false;
$frm_Main.MinimizeBox = $false;
#endregion
#region ProgressBar
$progressBar1.Location = new-object System.Drawing.Point(5,15)
$progressBar1.Size = New-Object System.Drawing.Size(425,30)
$progressBar1.Name = \"progressBar1\"
$progressBar1.Style = 'Marquee'
$progressBar1.Step = 20
$progressBar1.Visible = $true
$frm_Main.Controls.Add($progressBar1)
$progressBar2.Location = new-object System.Drawing.Point(5,215)
$progressBar2.Size = New-Object System.Drawing.Size(425,30)
$progressBar2.Name = \"progressBar1\"
$progressBar2.Style = 'Marquee'
$progressBar2.Step = 20
$progressBar2.Visible = $false
$frm_Main.Controls.Add($progressBar2)
#endregion
#region Bouton - Lancement
$btn_Export.TabIndex = 16
$btn_Export.Name = 'btn_Export'
$btn_Export.Size = New-Object System.Drawing.Size(425,30)
$btn_Export.Location = New-Object System.Drawing.Point(5,515)
$btn_Export.UseVisualStyleBackColor = $True
$btn_Export.Visible = $true
$btn_Export.Text = 'Ici'
$btn_Export.add_Click($btn_Export_OnClick)
$frm_Main.Controls.Add($btn_Export)
#endregion
#region Label - Result
$lbl_Result.Font = new-object System.Drawing.Font('Verdana', 10, [System.Drawing.FontStyle]::Bold, [System.Drawing.GraphicsUnit]::«»Point,0)
$lbl_Result.Size = New-Object System.Drawing.Size(435,35)
$lbl_Result.Location = new-object System.Drawing.Point(5,475)
$lbl_Result.TextAlign = [System.Drawing.ContentAlignment]::MiddleCenter
$lbl_Result.Forecolor = [System.Drawing.Color]::Green
$lbl_Result.Name = 'lbl_Result'
$lbl_Result.Text = 'Cliquer'
$frm_Main.Controls.Add($lbl_Result)
#endregion
#Save the initial state of the form
$InitialFormWindowState = $frm_Main.WindowState
#Show the Form
#$frm_Main.ShowDialog()| Out-Null
#->
##################################################
$frm_Main.Show()
while ($frm_Main.Visible)
{
[System.Windows.Forms.Application]::«»DoEvents()
}
##################################################
[/code:1]
Message édité par: bidouilles, à: 28/11/12 10:42
Message édité par: bidouilles, à: 28/11/12 10:43<br><br>Message édité par: bidouilles, à: 28/11/12 11:20
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 13 ans 3 mois #13144
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Thread et ressources allouées à un seul process
bidouilles écrit:
Ta formulation laisse supposer que nous avons le contrôle de ce fonctionnement, ce n'est, à mon avis pas le cas, car il faut déjà le connaitre pour pouvoir le contourner.
Et là, 'on' entre en scène. Premier acte.
bidouilles écrit:
bidouilles écrit:
Comme ça en passant, utiliser le C#
Sinon, en trépassant, il faut injecter l'état de session du runspace du formulaire dans le runspace du job.
Le pb est que le runspace d'un PSJob est d'un accès privé, et comme tu dois le savoir, ce qui est privée ne nous regarde pas
A moins d'utiliser l'objet personnalisé utilisé dans le tutoriel précédement cité
Bref, je te souhaite bon courage pour la suite.
Début du second acte.
(le souffleur : 'à toi' )
Juste une précision (j'aime bien la précision), 'ON' n'a aucune obligation, c'est la mécanique de Powershell qui fonctionne ainsi.on est effectivement obligé d'avoir 2 Thread
Ta formulation laisse supposer que nous avons le contrôle de ce fonctionnement, ce n'est, à mon avis pas le cas, car il faut déjà le connaitre pour pouvoir le contourner.
Et là, 'on' entre en scène. Premier acte.
bidouilles écrit:
J'ai comme l'impression que la suite de ton post laisse penser le contraire, mais je peux me tromper.depuis PowerShell 2 cela est devenu tres simple avec les job
bidouilles écrit:
Entracte.Auriez vous une idée svp?
Comme ça en passant, utiliser le C#
Sinon, en trépassant, il faut injecter l'état de session du runspace du formulaire dans le runspace du job.
Le pb est que le runspace d'un PSJob est d'un accès privé, et comme tu dois le savoir, ce qui est privée ne nous regarde pas
A moins d'utiliser l'objet personnalisé utilisé dans le tutoriel précédement cité
Bref, je te souhaite bon courage pour la suite.
Début du second acte.
(le souffleur : 'à toi' )
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.050 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- Thread et ressources allouées à un seul process