[R] Problème de "Slip" :)

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

[R] Problème de "Slip" :)

#1

Message par DimVar »

Bonjour,


Dans une boucle qui teste le retour du source (_INetGetSource) de "monip.org", j'analyse le source pour récupérer mon ip public.
Si mon ip public est différente de mon ancienne ip, alors je log dans un txt en local.

J'ai jouté un tray pour fermer le prog quand je le souhaite.
J'ai ensuite ajouté un sleep d'une minute pour temporiser la requête http vers "monip.org".
Seulement voila, ma fonction Exit (associée au trayItem) ne fonctionne plus.
Je me doute que le sleep est en cause mais pourquoi ?

Merci du coup de pouce.

(je sais, j'ai du mal à comprendre les notions de temps/boucle/sleep... :oops: )
Modifié en dernier par DimVar le jeu. 18 nov. 2010 15:11, modifié 3 fois.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème de "Slip" :)

#2

Message par Tlem »

Il est certes de saison d'avoir un slip pour dormir, mais dans le cas de votre script, il est fortement recommandé de laisser votre postérieur à l'air ... :lol:

Pour faire court, votre Sleep() bloque votre script le temps de la pause.
Donc au lieu de temporiser avec cette commande, utilisez plutôt AdlibRegister() pour lancer votre fonction _INetGetSource () à intervalle régulier. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Problème de "Slip" :)

#3

Message par DimVar »

Tlem a écrit :Il est certes de saison d'avoir un slip pour dormir, mais dans le cas de votre script, il est fortement recommandé de laisser votre postérieur à l'air ... :lol:
Joli ! 8)

Merci pour AdlibRegister(). Je comprends que si je mets en paramètre "ma fonction qui récupère l'ip", avec en 2e param la fréquence à laquelle je veux l'exécuter, ca va marcher.
Mais j'ai du mal à comprendre le fonctionnement de la fonction.
"Adlib" pour ajout de bibliothèque ? (add library ?)
"Register" idem...
De quoi est il question au juste ?
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème de "Slip" :)

#4

Message par Tlem »

C'est encore tout chaud, mais cela devrait vous donner une bonne idée de la chose : http://www.autoitscript.fr/forum/viewto ... =40&t=6154
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Problème de "Slip" :)

#5

Message par DimVar »

Impec !
Merki.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [R] Problème de "Slip" :)

#6

Message par DimVar »

Changement de sujet mais lié au script.

Le gestionnaire de tache windows m'annonce 8mo de mémoire alloué.
Peux on baisser l'occupation mémoire en l'optimisant ?

Merci.
► Afficher le texte
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème de "Slip" :)

#7

Message par Tlem »

8 Mo pour un script qui ne doit pas faire plus de 520 Ko, je trouve ça étrange.
Mais il me semble bien qu'il existe une fonction du style : ReduceMemory
Il faudra chercher un peut.

Par contre, attention au boucle While/Wend. On à vite fait de prendre froid au fesses lorsque la boucle est trop rapide.
Il vaut mieux mettre un slip. :P Au moins de 50ms. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] Problème de "Slip" :)

#8

Message par legend »

tu pourrais aussi passer par un timer.
sa aidera juste a calculer un intérvale de temp sans bloquer le script comme le fait ton slip :)
bonne journée
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Problème de "Slip" :)

#9

Message par DimVar »

Tlem : Je n'ai rien trouvé sur le reduceMemory (dans l'aide autoit).
Legend : Qu'entends tu par timer ?

Vous serez t'il possible de compiler le script et de le tester chez vous en environnement Microsoft et me dire combien de mémoire il prends ?

Merci.
Fichiers joints
Untitled.jpg
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] Problème de "Slip" :)

#10

Message par legend »

Bonjour,
voici ce que fait la fonction timer.

Code : Tout sélectionner

#Include <Timers.au3>
$timer=_Timer_Init() ; à mettre au début de la fonction
while 1
; actions a faire ici.
if $timer > 60000 then
;actions a faire quand les 60secondes se sont écoulés. remplace 60000 par le temp choisis en ms.
$timer=_Timer_init() ; remettre a 0 le timer.
endif
j'espére que sa te sera utile.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Problème de "Slip" :)

#11

Message par timmalos »

La fonction Timer n'est d'AUCUNE utilité ici.
Comme l'a deja dit Tlem, il FAUT que vous rajoutiez un Sleep(50) dans votre boucle While.
Sur le lien suivant, vous verrez pourquoi :
http://www.siteduzero.com/tutoriel-3-22 ... #ss_part_2

Edit: Petite erreur de macro dans ton script :
Script ci-dessous corrigé ne prend que 3M chez moi.

Code : Tout sélectionner

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_outfile=IP_log.exe
#AutoIt3Wrapper_UseUpx=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs ----------------------------------------------------------------------------

    AutoIt Version: 3.3.6.1
    Author:         myName

    Script Function:
    Log l'adresse ip public

#ce ----------------------------------------------------------------------------



#include <INet.au3>

Opt("TrayMenuMode", 3)

Global $HTTPsource, $ipNew, $ipPos, $ipOld, $exit

AdlibRegister("_RecupereIP", 90000); lance la  fonction toutes les x millisecondes

$menuIPlog = TrayCreateItem("Log IPs")
$exit = TrayCreateItem("Exit")


While 1

    $msg = TrayGetMsg()
    If $msg = $menuIPlog Then
        Run("notepad.exe " & @MyDocumentsDir & "\_LOG_IP_PUBLIC.log")
    EndIf

    If $msg = $exit Then
        Exit
    EndIf
    Sleep(50)
WEnd






Func _RecupereIP()

    $ipOld = _IPold()
    $ipNew = _IPnew()

    If $ipOld <> $ipNew Then
        _logIP()
    EndIf

EndFunc   ;==>_RecupereIP

Func _IPold()

    Local $fo, $line

    $fo = FileOpen(@MyDocumentsDir & "\_LOG_IP_PUBLIC.log",8)
    $ipOld = FileReadLine($fo, -1)
    FileClose($fo)
    Return $ipOld

EndFunc   ;==>_IPold


Func _IPnew()

    $HTTPsource = InetRead("http://monip.org",1)
    $ipPos = StringInStr($HTTPsource, "IP :", 1)
    $ipNew = StringMid($HTTPsource, $ipPos, 18)
    Return $ipNew

EndFunc   ;==>_IPnew


Func _logIP()

    $fo = FileOpen(@MyDocumentsDir & "\_LOG_IP_PUBLIC.log", 9)
    FileWrite($fo, @CRLF & "[" & @YEAR & "/" & @MON & "/" & @MDAY & " : " & @HOUR & "H" & @MIN & "]" & @CRLF & $ipNew & @CRLF)
    FileClose($fo)

EndFunc   ;==>_logIP
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] Problème de "Slip" :)

#12

Message par legend »

désolé, je n'avais pas vu le code qu'il a posté ^^
bonne journée
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Problème de "Slip" :)

#13

Message par DimVar »

Merci pour les corrections et le lien. (j'y vois plus clair sur le while)
Même avec un slip, ca prends toujours 8 Mo...
Si qqun a une autre idée, je suis preneur (non pas que je manque de ram, mais 8mo pour un "get" de code source...) sinon je passe en resolu.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème de "Slip" :)

#14

Message par Tlem »

Un code légèrement plus court et 700Ko en utilisation. :wink:
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Problème de "Slip" :)

#15

Message par DimVar »

@tlem : Parfait ! Sauf que je comprends rien à la fonction dllCall. (va falloir que je m'y mette à ces DLL)
En gros je pense savoir que les dll contiennent des "fonctions" et que dllCall fait appel aux fonctions de ces dll.
Mais comment connaissez-vous les fonctioons de ces dll ? On vous les a appris en cours ? Il existe une doc la-dessus ? Vous etes devellopeur de chez Cro$oft ?

D'autre part, pour la fonction ReduceMemory(), vous mettez en parametres ($i_Pid = -1), alors que à l'appel de cette fonction (dans la fonction _recupereIp()) vous ne mettez pas de parametres...
De plus, au moment où on controle si $i_Pid <> -1, on ne connait pas la valeur de $i_Pid... ?!?!?

Je suis largué...
Si vous estimez l'explication trop complexe, laissez tomber, je verrais ca plus tard.

Merci encore.

[EDIT]J'ai trouvé ce topic qui va m'eclairer sur la fonction SRE.
Pour le DllCall, un dev du bureau va m'aider avec un outil qui ouvre les dll et en sort les fonctions (reflector ou un truc du genre). Encore merci pour tout. :)
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème de "Slip" :)

#16

Message par Tlem »

Hé non, je ne suis pas dévellopeur chez Microsoft.
Et tout comme vous, je ne connais pas particulièrement les fonctions des DLL. Par contre si vous allez sur le site de Microsoft, normalement chaque fonction des principales DLL sont décrites, voir expliquées avec des exemples.

Techniquement parlant, une fonction intégrée à une DLL est en tout point identique à une fonction écrite pour AutoIt et intégrée à un UDF :
  • Pour Autoit, vous devez inclure le fichier UDF, puis appeler la fonction avec ses paramètres.
  • Pour une fonction de DLL, vous devez utiliser la commande dllCall, puis appeler la fonction avec ses différents paramètres.
Dans un cas comme dans l'autre, généralement la fonction vous retourne une valeur qui permet de savoir si l'opération s'est bien déroulée.

Pour la deuxième partie de votre question, ReduceMemory et _recupereIp() sont des fonctions qui n'ont strictement rien à voir l'une avec l'autre.
Pour ReduceMemory(), si le paramètre $i_Pid est à -1, c'est que la fonction est écrite en ce sens, pour éviter d'avoir à récupérer le PID du script en cours (-1 sous-entend qu'il faut utiliser le PID 'local'), car il est possible d'utiliser cette fonction, pour diminuer l'utilisation mémoire d'un autre script/programme. ;)
En ce qui concerne la fonction _recupereIp(), je n'ai pas besoin de lui rentrer un paramètre, puisque elle est écrite pour ne pas en utiliser !!! :mrgreen:
DimVar a écrit :De plus, au moment où on controle si $i_Pid <> -1, on ne connait pas la valeur de $i_Pid... ?!?!?
Si vous regardez bien la fonction ReduceMemory, elle est décomposée en deux choix :
1 - Si on a déterminer le PID (If $i_PID <> -1)
2 - Si la valeur de PID est -1 (Else)
  • Si le PID est déterminé (cas N°1) alors la fonction récupère le handle du process correspondant au PID (Fonction OpenProcess de la DLL kernel32.dll), puis effectue la réduction de mémoire grace à l'appel de la fonction EmptyWorkingSet de la DLL psapi.dll et fini par la fermeture du handle (Fonction CloseHandle de la DLL kernel32.dll).
  • Si le PID n'est pas fixé, alors la valeur par défaut est utilisée (-1) et donc on tombe dans le cas N°2. Ce qui utilise la même fonction et DLL que ci-dessus, mais sans avoir besoin de préciser le handle de l'application, car celui-ci est celui du script en cours ... ;)
Voilà, voilà. Je pense qu'une grosse partie de vos interrogations devraient être à présent éclaircies. :roll:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [R] Problème de "Slip" :)

#17

Message par DimVar »

Owaaah ! Ça c'est de la réponse !
Effectivement, j'ai compris pas mal de choses là.
Merci d'avoir pris le temps de rédiger tout ca (en plus de façon claire).
Sujet clos.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Répondre