Autoit boucle while qui monte en charge en continu en mémoire

Résolu/Fermé
Fontainard Messages postés 68 Date d'inscription dimanche 16 mars 2014 Statut Membre Dernière intervention 24 janvier 2017 - Modifié par Fontainard le 20/02/2015 à 13:19
 Utilisateur anonyme - 22 févr. 2015 à 21:25
Bonjour,
Premier problème : Ma boucle est sensé tourner en continu, mais le problème c'est qu'elle monte en charge continuellement dans mon gestionnaire de tâche (Elle prend de + en + de mémoire à l'infini). Ce qui est assurément problématique.

Deuxième problème: Ma case Pause et quitter ne fonctionne plus lorsque la boucle est démarrée, ne fonctionne pas (a)

Décidément, inarrêtable cette boucle :P

Merci infiniment pour vous aide !


$GUI = GUICreate("Surveillant de tâches IRIS", 310, 60, 5, 5, $WS_OVERLAPPEDWINDOW, $WS_EX_TOPMOST)
$Boutonstart = GUICtrlCreateButton("Surveiller", 5, 5, 150, 50)
$Boutonstop = GUICtrlCreateButton("Pause", 155, 5, 150, 50)
GUISetOnEvent($GUI_EVENT_CLOSE,"Quitter")

GUISetState()

While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
Exit
Case $Boutonstart

while 1
$NomFichier = "nom.txt"
$ChaineRecherchee = "rapportée"
$i = 1
$doublon = 0
$nombrefichiers = 0

$Fichier = FileOpen($NomFichier, 0)
If $Fichier = -1 Then
MsgBox(0, "Erreur", "L'ouverture du fichier est impossible")
Exit
EndIf
While 1.
$ligne = FileReadLine($Fichier)
If @error = -1 Then
ExitLoop
Else
If StringInStr($ligne, $ChaineRecherchee, 2) <> 0 Then
$doublon = $doublon + 1
EndIf
$i = $i + 1
EndIf
$nombrefichiers = DirGetSize("H:\TEST",1)
;MsgBox(0,"information","le repertoire cible contient "&$nombrefichiers[1] & " fichiers",2)
WEnd

Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")

If $doublon = 1 Then
;MsgBox(0, "Information", "Une seule tâche se déroule", 1)

ElseIf $doublon > 1 Then
Local $Body ="Deux tâches rapportées ont été détectés"
MsgBox(0, "Information", "Doublon détécté, envoi de la notification", 5);
$rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc)
EndIf
Sleep(20*60000)

Else
;MsgBox(0, "Résultat", "Aucune tâche en cours d'éxécution", 1)
Sleep(20*60000)
EndIf

If $nombrefichiers[1] > 20 Then
Local $Body = "20 fichiers ce sont accumulés dans le répértoire"
MsgBox(0, "Information", "20 fichiers ce sont accumulés dans le répértoire, envoi de la notification", 5);
$ro = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $ro)
EndIf
Sleep(20*60000)
EndIf

If $nombrefichiers[1] > 20 and $doublon > 1 Then
Local $Body = "Deux tâches rapportées ont été détectés et 20 fichiers ce sont accumulés dans le répértoire"
MsgBox(0, "Information", "20 fichiers ce sont accumulés dans le répértoire, envoi de la notification", 5);
$ri = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $ri)
EndIf
Sleep(20*60000)
Endif


;60000 = 1 minute
Sleep(6000)
WEnd
Case $Boutonstop
$pause = 1
EndSwitch
WEnd

A voir également:

1 réponse

Salut.

GUISetOnEvent($GUI_EVENT_CLOSE,"Quitter")

Supprime cette ligne.

Car cela appelle, non pas la "case", mais la fonction Quitter(), que tu n'as pas.

Et n'oublie pas de mettre les includes concernant :
- $GUI_EVENT_CLOSE (include GUIConstantsEx.au3)
- $WS_OVERLAPPEDWINDOW / $WS_EX_TOPMOST (include WindowsConstants.au3)

@++
1