[R] Switch et variable

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jpascal
Niveau 4
Niveau 4
Messages : 85
Enregistré le : jeu. 16 oct. 2008 15:21
Status : Hors ligne

[R] Switch et variable

#1

Message par jpascal » lun. 02 juil. 2018 12:01

Bonjour,

Désolé pour le titre peu explicite.

Dans l'aide GUI Reference - MessageLoop Mode, l'exemple contient :

Code : Tout sélectionner

Local $iMsg = 0
While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
        Case $iOKButton
            MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the OK button.")

        Case $GUI_EVENT_CLOSE
            MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the Close button. Exiting...")
            ExitLoop
    EndSwitch
WEnd
Est-ce que ce code est aussi performant ?

Code : Tout sélectionner

While 1
    Switch GUIGetMsg()
        Case $iOKButton
            MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the OK button.")

        Case $GUI_EVENT_CLOSE
            MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the Close button. Exiting...")
            ExitLoop
    EndSwitch
WEnd
ou le problème vient-il du fait que GUIGetMsg() est testé à chaque Case et il vaut donc mieux utiliser la variable $iMsg ?
Modifié en dernier par jpascal le lun. 02 juil. 2018 13:37, modifié 1 fois.
AutoIt 3.3.14.5 / SciTE 3.7.3 / Windows 7 & 10 x64

Avatar du membre
orax
Modérateur
Modérateur
Messages : 1445
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Contact :
Status : Hors ligne

Re: [..] Switch et variable

#2

Message par orax » lun. 02 juil. 2018 12:45

Logiquement, GUIGetMsg() est testé au niveau du Switch, il n'est pas testé à chaque Case. Donc le premier code n'est pas plus performant.
On peut avoir une idée de la performance des deux versions en utilisant TimerInit() et TimerDiff().
#include <Constants.au3>
#include <GUIConstantsEx.au3>

Local $hGUI = GUICreate("Hello World", 200, 100)
GUICtrlCreateLabel("Hello world! How are you?", 30, 10)
Local $iOKButton = GUICtrlCreateButton("OK", 70, 50, 60)
GUISetState(@SW_SHOW, $hGUI)

Local $iMsg = 0
$t = TimerInit()
For $i = 1 To 1000
        Switch GUIGetMsg()
                Case $iOKButton
                        MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the OK button.")
                Case $GUI_EVENT_CLOSE
                        MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the Close button. Exiting...")
                        ExitLoop
                ;Case ...
        EndSwitch
Next
ConsoleWrite(TimerDiff($t) & @CRLF)

GUIDelete($hGUI)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)

jpascal
Niveau 4
Niveau 4
Messages : 85
Enregistré le : jeu. 16 oct. 2008 15:21
Status : Hors ligne

Re: [..] Switch et variable

#3

Message par jpascal » lun. 02 juil. 2018 13:35

C'est vrai que ce bon vieux TimerDiff() est toujours utile.

Puisqu'il n'y a pas de différence, je vais donc économiser deux lignes. :)

Merci orax pour ta réponse.
AutoIt 3.3.14.5 / SciTE 3.7.3 / Windows 7 & 10 x64

Avatar du membre
mdanielm
Membre émérite
Membre émérite
Messages : 194
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: [R] Switch et variable

#4

Message par mdanielm » mar. 03 juil. 2018 18:48

Si le seul objectif est de réduire le nombre de lignes, il y a ça:
Do
        $iMsg = GUIGetMsg()
        if $iMsg = $iOKButton Then MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the OK button.")
Until $iMsg = $GUI_EVENT_CLOSE
MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the Close button. Exiting...")

Répondre