[R] Problème avec la fonction Adlibregister

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Supernatural
Niveau 2
Niveau 2
Messages : 26
Enregistré le : jeu. 06 avr. 2017 15:18
Status : Hors ligne

[R] Problème avec la fonction Adlibregister  

#1

Message par Supernatural »

Bonjour,

Je souhaite lancer une requête toutes les 300s, et afficher dans un GUI les actions associées.

Jusque là ça fonctionne à peu près sauf que j'ai un problème au niveau de la synchronisation des temps,

Ci-joint mon code:
#include <File.au3>
#include <Date.au3>
#include <Array.au3>
#include <file.au3>
#include <FileConstants.au3>
#include <WinAPIFiles.au3>
#include <EzMySql.au3>
#include <EzMySql_Dll.au3>
#include <AutoItConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <ListviewConstants.au3>
#include <GuiListView.au3>

Opt("GUIOnEventMode", 1)
Opt("MouseCoordMode", 2)
Opt("MustDeclareVars", 1)

Global $iTime = 10000, $hGUI, $sMessage, $iMemo, $hiMemo, $Wcurve = 580, $Left = 50, $RUNNING=0, $ix=0
Global $aID_LINE[2]=["array_1", "array_2"]

$hGUI = GUICreate("", 600, 200, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
$iMemo = GUICtrlCreateListView(" ", 5, 5, 590, 180, $LVS_NOCOLUMNHEADER)
GUICtrlSendMsg($iMemo, $LVM_SETCOLUMNWIDTH, 0,$Wcurve - 10)
GUICtrlSetFont($iMemo, 8, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW, $hGUI)

Adlibregister ("MaFonction", $iTime)

While 1
   Sleep (200)
   If $RUNNING = 1 Then ContinueLoop
   _Stop()
Wend

Func _Stop()
   $ix=0
   For $ix=($iTime/1000) to 0 Step - 1
      Sleep(1000)
      _GUICtrlListView_DeleteAllItems($iMemo)
      MemoWrite("query will start in " & $ix & "s")
   Next
Endfunc

Func _Exit()
   Exit
EndFunc

Func MemoWrite($sMessage)
   $hiMemo = GUICtrlCreateListViewItem($sMessage, $iMemo)
EndFunc

Func MaFonction()
   $RUNNING = 1
   MemoWrite("MaFonction is going on...")

   For $i=0 to UBound($aID_LINE) - 2

      MemoWrite("Create toto")

      MemoWrite("Create tata")

      MemoWrite("Execute tata")

      MemoWrite("Reading file csv")

      MemoWrite("_EzMySql_Startup()")

      MemoWrite("_EzMySql_Open()")

      MemoWrite("_EzMySql_SelectDB()")

      MemoWrite("_EzMySql_Exec()")

      MemoWrite("_EzMySql_Close()")
     
      _EzMySql_Close()
      _EzMySql_ShutDown()
      $ix=0
      $RUNNING=0

   Next
Endfunc
Merci par avance
Modifié en dernier par Supernatural le mer. 02 mai 2018 09:56, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème avec la fonction Adlibregister

#2

Message par Tlem »

Bonsoir:
D'après votre code : Global $aID_LINE[2]=["array_1", "array_2"]
Mais un peu plus bas vous faites : For $i=0 to UBound($aID_LINE) - 2 qui ce traduit par For $i=0 to 2 - 2 soit For $i=0 to 0 du coup, ca peux pas fonctionner !
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é".
Supernatural
Niveau 2
Niveau 2
Messages : 26
Enregistré le : jeu. 06 avr. 2017 15:18
Status : Hors ligne

Re: [..] Problème avec la fonction Adlibregister

#3

Message par Supernatural »

Oui effectivement, premier point.

Mais ma remise à zéro de la boucle ne s'effectue pas correctement.

Je n'arrive pas à faire (enfin si mais ça bug):
1./Je décrémente le temps $iTime dans ma GUI,
2./Une fois le temps $iTime écoulé je lance ma fonction (Adlibregister),
3./Une fois celle-ci finie j'attend $iTime avant de relancer ma fonction et ainsi de suite....
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Problème avec la fonction Adlibregister

#4

Message par mikell »

Que vient faire AdlibRegister là-dedans ? une boucle suffit, non ?

1./Je décrémente le temps $iTime dans ma GUI,
2./Une fois le temps $iTime écoulé je lance ma fonction,
3./Une fois celle-ci finie retour à 1./ .... (j'attend $iTime avant de relancer ma fonction et ainsi de suite....)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Supernatural
Niveau 2
Niveau 2
Messages : 26
Enregistré le : jeu. 06 avr. 2017 15:18
Status : Hors ligne

Re: [..] Problème avec la fonction Adlibregister

#5

Message par Supernatural »

Du coup, j'ai scrapé la fonction Adlibregister et suis passé avec un compteur 'simple', mais je rencontre le problème: "Error: Recursion level has been exceeded - Autoit will quit to prevent stack overflow".

A première vue cela viendrais de mon code qui s'auto-appelle de trop dans les boucles...

Si une âme charitable pouvait regarder mon code... (je n'ai pas tout mis le code)
_MySQLIni()

Func _MySQLIni()
   ;Initialisation de ma base de données...
EndFunc

_COUNTDOWN()
Func _COUNTDOWN()
   $Minutes = 1 ; will wait 90 minutes

   Local $60Count = 0, $begin = TimerInit()
   While $Minutes > $60Count

      $dif = TimerDiff($begin)
      $Count = int($dif/1000)
      $60Count = Int($Count / 60)
      Sleep(200)

   WEnd
   _MAFONCTION()
EndFunc

Func _MAFONCTION()
   ;Création batchfile...
   ;Excecution batchfile...
   ;Lecture fichier csv généré...
   ;Traitement des données...
   ;Stockage des données dans ma base...
   _COUNTDOWN()
Endfunc
Merci par avance.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Problème avec la fonction Adlibregister

#6

Message par mikell »

Quand je disais "une boucle suffit" je pensais à quelque chose comme ça :

$delai = 300          ; secondes soit 5 minutes
$begin = TimerInit()  ; initialisation

While 1
  $time = TimerDiff($begin)/1000   ; temps écoulé en secondes
  If $time > $delai Then
   _MAFONCTION()    ; tâches à effectuer
   $begin = TimerInit()   ; réinitialise le timer
  EndIf
  Sleep(200)
WEnd

NB : l'erreur "Recursion level... etc" vient du fait que tu exécutes chaque fonction sans quitter la précédente
ça peut se résoudre en utilisant Return

Func _COUNTDOWN()
        ;....
        Return _MAFONCTION()  
EndFunc

Func _MAFONCTION()
        ;....
        Return _COUNTDOWN()
Endfunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Supernatural
Niveau 2
Niveau 2
Messages : 26
Enregistré le : jeu. 06 avr. 2017 15:18
Status : Hors ligne

Re: [..] Problème avec la fonction Adlibregister

#7

Message par Supernatural »

Merci beaucoup, sujet résolu.
Répondre