Page 1 sur 1

[..] AdlibRegiter

Posté : mar. 21 juin 2011 11:01
par Jerome
Coucou,



Et oui, parfois besoin d'aide et de lumière de la part de mes confrères ainsi que des membres :)


Voici le binz :


J'ai une première fonction déclarer avec AdLibRegister comme ceci :

Code : Tout sélectionner

AdlibRegister("status",1000)
Et la fonction :

Code : Tout sélectionner

Func status()
    $time = TimerDiff($timer)
    $string = StringFormat("min: %03u  sec: %02u", $time/1000/60, Mod($time/1000,60))
    GUICtrlSetData($label_stat, $string)
EndFunc

En gros, j'initialise un Timer en debut de programme, puis j'update ce timer dans ma GUI, en gros je fait un défilement en minute / seconde de mon programme.

Bref, cette fonction marche nickel, update bien ect.


Or, je voudrait maintenant enregistrer une autre Adlib.

Donc en dessous de l'autre (déclarer au debut du script), je met :

Code : Tout sélectionner

AdlibRegister("debug",3600000)
Cette fonction Debug se lance toutes les heures.
Pour des raisons de confidentialité du programme, je ne donnerai pas la fonction debug, mais il n'y pas a pas de sleep(), ni de pause ou quoi que ce soit. Il passe dedans, check quelque chose (tester et approuvé), puis sort de l'adlib.



Vous me direz, nickel, sa roule, sa marche comme sur des patinettes.
Et bien non, une fois passer dans ma fonction Debug, la première AdlibRegister (celle Statut) n'update plus (en gros, le temps est figé sur la GUI, alors que les autres label continu d'être updater, ce qui prouve que le programme tourne toujours.)


Bref, j'ai test plusieurs chose.

Style une seul Adlib statut qui était :

Code : Tout sélectionner

Func status()
    $time = TimerDiff($timer)
    $string = StringFormat("min: %03u  sec: %02u", $time/1000/60, Mod($time/1000,60))
    GUICtrlSetData($label_stat, $string)
        If @hour = 15 AND @MIN = 10 AND @SEC = 12 then
                Debug()
        Endif
        If @hour = 16 AND @MIN = 12 AND @SEC = 54 then
                Debug()
        Endif
EndFunc
La fonction Statut passe nickel, or dés que sa passe dans le IF, sa s'arrete (pourtant le programme continu de tourner).


J'ai aussi test AdlibUnregiter (mise dans ma fonction Debug) puis de la réactiver a la fin de la fonction Statut, sa donne rien....


Bref, need help :)




Cordialement,
Jérôme

Re: [..] AdlibRegiter

Posté : mar. 21 juin 2011 12:12
par jchd
Peut-être lié à ce bug et/ou à cet autre.

Re: [..] AdlibRegiter

Posté : mar. 21 juin 2011 16:05
par matwachich
J'ai remarqué il y a longtemps que Adlib n'est pas super fiable

Si j'étai toi, je ferai comme ça:

Code : Tout sélectionner

; Debut programme
Global $__Timer_Status, $__Timer_Update, $__Timer_Debug

; ...

$__Timer_Status = TimerInit()
$__Timer_Update = TimerInit()
$__Timer_Debug = TimerInit()

While 1 ; Boucle principale
    ; ---
    If TimerDiff($__Timer_Update) >= 1000 Then
        $timer = TimerDiff($__Timer_Status)
        $string = StringFormat("min: %03u  sec: %02u", $time/1000/60, Mod($time/1000,60))
        GUICtrlSetData($label_stat, $string)
        $__Timer_Update = TimerInit()
    EndIf
    ; ---
    If TimerDiff($__Timer_Debug) >= 3600000 Then
        _Debug()
        $__Timer_Debug = TimerInit()
    EndIf
    ; ---
    ; reste du programme
WEnd

Re: [..] AdlibRegiter

Posté : mar. 21 juin 2011 21:42
par mikell
Dans l'idée de matwachich, pourquoi pas un seul timer ?
Quelque chose comme ça (approximativement) :
► Afficher le texte
Edit : Mais c'est lourd... en fait AdLib ça semble mieux, parce que plus besoin de timer, un compteur suffit :
► Afficher le texte
Image

Re: [..] AdlibRegiter

Posté : mar. 21 juin 2011 21:47
par bloodwolff
Essaye de mettre une autre fonction à la place de débug pour voir si le problème vient de là

Re: [..] AdlibRegiter

Posté : mar. 21 juin 2011 22:07
par Tlem
En étant un peut chercheur de mer.., j'ai testé ceci avec succès !!!
► Afficher le texte
Donc j'en conclu (peut être à tord) à un problème sur ta fonction debug.
Regarde si tu ne touche pas des variables. :roll: