IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

PB ressources CPU allouées à un seul process et utilisation de thread


Sujet :

Scripts/Batch

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 64
    Points : 38
    Points
    38
    Par défaut PB ressources CPU allouées à un seul process et utilisation de thread
    Bonjour, J’ai ce qui semble un bug de Windows PowerShell que je ne retrouve pas avec les éditeurs de PowerShell comme Windows PowerShell ISE et n’arrive pas à le contourner, pourriez-vous m’aider s’il vous plait.
    Au clic sur un bouton, si je lance une fonction comme « Start-Sleep -Milliseconds 5000 » ou autre
    Apres avoir voulu afficher une progressBar comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            $progressBar2.Visible = $true
            $lbl_Result.Text = "Veuillez patienter..."
           $btn_Export.Enabled = $false
            Start-Sleep -Milliseconds 5000
    Le bouton se grise bien et le progressBar2 s’affiche bien mais l’appel après à une fonction comme Start-Sleep fige tous les progressBar le temps que cette fonction n’a pas finie d’être traité
    Es-ce parce que les progressBar n’ont pas assez de ressources CPU allouées ?
    Suis-je obligé de lancer la fonction dans un thread à part, si oui auriez-vous un exemple quelque part ?
    Voir le code complet ci dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
        #region Import the Assemblies 
        [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null 
        [reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null 
        
        $frm_Main = New-Object System.Windows.Forms.Form 
        $btn_Export = New-Object System.Windows.Forms.Button
        $lbl_Result = New-Object System.Windows.Forms.Label
          
        $btn_Export_OnClick=  
        {
            $lbl_Result.Text = "Génération du fichier XLS en cours. Veuillez patienter..."
    		$btn_Export.Enabled = $false
            Start-Sleep -Milliseconds 5000
            $frm_Main.Close()
               
        }      
    
        #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 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 = 'Lancer la génération du XLS' 
        $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 = 'Lancer la génération du XLS'     
        $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
    Merci d'avance

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 64
    Points : 38
    Points
    38
    Par défaut
    comme je le sentais cela est bien un problème de gestion des resources, on est 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
       #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()
        }
    ##################################################

Discussions similaires

  1. Ressource disponible qu'une seule fois
    Par tomy29 dans le forum Struts 1
    Réponses: 11
    Dernier message: 05/12/2008, 16h28
  2. Problème utilisation de ressources (CPU / RAM)
    Par CAML dans le forum Administration
    Réponses: 2
    Dernier message: 09/07/2008, 08h41
  3. Probleme de ressource CPu suite à un repaint
    Par cactus13 dans le forum 2D
    Réponses: 3
    Dernier message: 20/10/2007, 00h51
  4. ressource CPU serveur MySQL
    Par castasql dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 06/08/2007, 19h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo